void mpz_cdiv_qr (mpz_t q, mpz_t r, mpz_t n, mpz_t d)
ulong mpz_cdiv_q_ui (mpz_t q, mpz_t n, ulong d)
ulong mpz_cdiv_r_ui (mpz_t r, mpz_t n, ulong d)
ulong mpz_cdiv_qr_ui (mpz_t q, mpz_t r, mpz_t n, ulong d)
ulong mpz_cdiv_ui (mpz_t n, ulong d)
void mpz_cdiv_q_2exp (mpz_t q, mpz_t n, ulong b)
void mpz_cdiv_r_2exp (mpz_t r, mpz_t n, ulong b)
void mpz_fdiv_q (mpz_t q, mpz_t n, mpz_t d)
void mpz_fdiv_r (mpz_t r, mpz_t n, mpz_t d)
void mpz_fdiv_qr (mpz_t q, mpz_t r, mpz_t n, mpz_t d)
ulong mpz_fdiv_q_ui (mpz_t q, mpz_t n, ulong d)
ulong mpz_fdiv_r_ui (mpz_t r, mpz_t n, ulong d)
ulong mpz_fdiv_qr_ui (mpz_t q, mpz_t r, mpz_t n, ulong d)
ulong mpz_fdiv_ui (mpz_t n, ulong d)
void mpz_fdiv_q_2exp (mpz_t q, mpz_t n, ulong b)
void mpz_fdiv_r_2exp (mpz_t r, mpz_t n, ulong b)
void mpz_tdiv_q (mpz_t q, mpz_t n, mpz_t d)
void mpz_tdiv_r (mpz_t r, mpz_t n, mpz_t d)
void mpz_tdiv_qr (mpz_t q, mpz_t r, mpz_t n, mpz_t d)
ulong mpz_tdiv_q_ui (mpz_t q, mpz_t n, ulong d)
ulong mpz_tdiv_r_ui (mpz_t r, mpz_t n, ulong d)
ulong mpz_tdiv_qr_ui (mpz_t q, mpz_t r, mpz_t n, ulong d)
ulong mpz_tdiv_ui (mpz_t n, ulong d)
void mpz_tdiv_q_2exp (mpz_t q, mpz_t n, ulong b)
void mpz_tdiv_r_2exp (mpz_t r, mpz_t n, ulong b)
q = n / d; r = n % d;
q = n >> b; r = n & ((1 << b) - 1); (n == q * d + r) か (n == q << b + r) が成り立つ
cdiv は q が +∞ 方向に丸められる。
r は d と逆符号。ceil。
fdiv は q が -∞ 方向に丸められる。
r は d と同符号。floor。
tdiv は q が 0 方向に丸められる。
r は n と同符号。truncate。
b を使う場合の説明は d = 1 << b; として読む。
void mpz_mod (mpz_t r, mpz_t n, mpz_t d)
ulong mpz_mod_ui (mpz_t r, mpz_t n, ulong d)
r = n % d; (r ≥ 0)
void mpz_divexact (mpz_t q, mpz_t n, mpz_t d)
void mpz_divexact_ui (mpz_t q, mpz_t n, ulong d)
q = n / d; // n % d = 0 が前提
int mpz_divisible_p (mpz_t n, mpz_t d)
int mpz_divisible_ui_p (mpz_t n, ulong d)
(n % d == 0)
int mpz_divisible_2exp_p (mpz_t n, ulong b)
(n % (1 << b) == 0)
int mpz_congruent_p (mpz_t n, mpz_t c, mpz_t d)
int mpz_congruent_ui_p (mpz_t n, ulong c, ulong d)
(n == (c % d))
int mpz_congruent_2exp_p (mpz_t n, mpz_t c, ulong b)