67void mpz_pow_mpz(mpz_t& r,
const mpz_t& b,
const mpz_t& e)
noexcept {
68 if (mpz_fits_ulong_p(e)) {
69 mpz_pow_ui(r, b, mpz_get_ui(e));
80 mpz_div_ui(e_half, e, 2);
94 mpz_init(e_minus_one);
96 mpz_sub_ui(e_minus_one, e, 1);
103 mpz_clear(e_minus_one);
138 mpz_inits(a, b, c, d,
nullptr);
150 mpq_canonicalize(num);
152 mpz_clears(a, b, c, d,
nullptr);
173 mpz_inits(num, den,
nullptr);
180 mpz_pow_ui(num, num, p);
181 mpz_pow_ui(den, den, p);
190 mpz_clears(num, den,
nullptr);
202 if (mpz_cmp_ui(p, 0) == 0) {
206 if (mpz_cmp_ui(p, 1) == 0) {
211 mpz_inits(num, den,
nullptr);
228 mpz_clears(num, den,
nullptr);
234[[nodiscard]]
inline std::size_t
mpz_bytes(
const mpz_t& v)
noexcept
236 const std::size_t alloc =
static_cast<std::size_t
>(v[0]._mp_alloc);
237 return sizeof(mp_limb_t)*alloc;
void mpz_divide_mpq(mpq_t &r, const mpz_t &k) noexcept
Rational-Integer division.
Definition utils.hpp:114
std::size_t mpz_bytes(const mpz_t &v) noexcept
Returns the amount of bytes of a gmp's integer value.
Definition utils.hpp:234
void mpq_divide_mpq(mpq_t &num, const mpq_t &den) noexcept
Rational-Rational division.
Definition utils.hpp:136
void operate_power(mpq_t &r, uint64_t p) noexcept
Power operation.
Definition utils.hpp:163
void mpz_pow_mpz(mpz_t &r, const mpz_t &b, const mpz_t &e) noexcept
Computes the exponentiation of a big integer to another big integer.
Definition utils.hpp:67
Main namespace of the library.
Definition basic_types.hpp:48