20 mpz_init2(data,
static_cast<unsigned int>(bitCount));
40 BigInt(std::string(size, item),base) {
71 return static_cast<int>(
mpz_size(data) *
sizeof ((*data->_mp_d)));
75 return static_cast<int>(
getString(2).size());
79 return static_cast<int>(std::ceil(
static_cast<double>(
longBits()) / 8));
82#define GMP_ABS(x) ((x) >= 0 ? (x) : -(x))
84 return static_cast<int>(
static_cast<size_t>(
GMP_ABS( data->_mp_alloc)) *
85 sizeof ((*data->_mp_d)));
104 return "1" + std::string(
pow,
'0');
135 return left -= std::abs(right);
139 return right += left;
143 mpz_add(left.data, left.data, right.data);
148 return left +=
BigInt(right);
152 return BigInt(left) + right;
160 return left -= std::abs(right);
164 mpz_add(left.data, left.data, right.data);
169 return left +=
BigInt(right);
175 mpz_sub(left.data, left.data, right.data);
184 return left += std::abs(right);
192 return right += std::abs(left);
201 return left -=
BigInt(right);
205 return BigInt(left) - right;
209 mpz_sub(left.data, left.data, right.data);
214 return left -=
BigInt(right);
222 return left += std::abs(right);
242 return left /=
BigInt(right);
246 return BigInt(left) / right;
250 return BigInt(left) / right;
259 return left /=
BigInt(right);
273 mpz_mul(left.data, left.data, right.data);
287 return right *= left;
291 return right *=
BigInt(left);
295 return left *=
BigInt(right);
299 mpz_mul(left.data, left.data, right.data);
304 return left *=
BigInt(right);
328 return BigInt(left) % right;
332 return left %=
BigInt(right);
336 return BigInt(left) % right;
350 return left %=
BigInt(right);
383 static_cast<unsigned int>(std::abs(right)));
387 return left << right;
395 static_cast<unsigned int>(std::abs(right)));
399 return left >> right;
407 static_cast<unsigned int>(std::abs(right)));
411 return left <<= right;
419 static_cast<unsigned int>(std::abs(right)));
423 return left >>= right;
433 mpz_ior(left.data, left.data, right.data);
438 return left |
BigInt(right);
442 mpz_ior(left.data, left.data, right.data);
447 return left |=
BigInt(right);
451 mpz_and(left.data, left.data, right.data);
456 return left &
BigInt(right);
461 mpz_and(left.data, left.data, right.data);
466 return left &=
BigInt(right);
470 mpz_xor(left.data, left.data, right.data);
475 return left ^
BigInt(right);
479 mpz_xor(left.data, left.data, right.data);
484 return left ^=
BigInt(right);
495 return mpz_cmp(left.data, right.data) == 0;
503 return left ==
BigInt(right);
507 return right == left;
511 return right ==
BigInt(left);
515 return !(left == right);
519 return !(left == right);
523 return left !=
BigInt(right);
527 return right != left;
531 return right !=
BigInt(left);
535 return mpz_cmp(left.data, right.data) < 0;
543 return left <
BigInt(right);
551 return right >
BigInt(left);
555 return mpz_cmp(left.data, right.data) > 0;
563 return left >
BigInt(right);
571 return right <
BigInt(left);
575 return mpz_cmp(left.data, right.data) <= 0;
583 return left <=
BigInt(right);
587 return right >= left;
591 return right >=
BigInt(left);
595 return mpz_cmp(left.data, right.data) >= 0;
603 return left >=
BigInt(right);
607 return right <= left;
611 return right <=
BigInt(left);
BigInt operator*(BigInt left, const BigInt &right)
bool operator==(const BigInt &left, const BigInt &right)
BigInt & operator+=(BigInt &left, intMpz right)
BigInt & operator<<=(BigInt &left, int right)
bool operator<=(const BigInt &left, const BigInt &right)
BigInt & operator&=(BigInt &left, const BigInt &right)
BigInt operator%(BigInt left, const BigInt &right)
BigInt operator~(BigInt left)
BigInt operator<<(BigInt left, int right)
BigInt operator+(BigInt left, intMpz right)
bool operator>(const BigInt &left, const BigInt &right)
BigInt & operator|=(BigInt &left, const BigInt &right)
bool operator<(const BigInt &left, const BigInt &right)
BigInt & operator^=(BigInt &left, const BigInt &right)
BigInt operator|(BigInt left, const BigInt &right)
BigInt & operator/=(BigInt &left, const BigInt &right)
BigInt & operator*=(BigInt &left, const BigInt &right)
BigInt & operator>>=(BigInt &left, int right)
BigInt & operator%=(BigInt &left, const BigInt &right)
bool operator>=(const BigInt &left, const BigInt &right)
BigInt operator/(BigInt left, const BigInt &right)
BigInt operator>>(BigInt left, int right)
BigInt operator^(BigInt left, const BigInt &right)
bool operator!=(const BigInt &left, const BigInt &right)
BigInt & operator-=(BigInt &left, const BigInt &right)
BigInt operator&(BigInt left, const BigInt &right)
BigInt operator-(BigInt left, const BigInt &right)
bool operator!(const BigInt &val)
The BigInt class - c++ minigmp wrapper.
BigInt & operator=(const BigInt &val)
BigInt & powm(const BigInt &pow, const BigInt &mod)
BigInt & gcd(const BigInt &a, const BigInt &b)
bool isPrime(bool absalut=false) const
std::string getString(int base=10) const
int longBits() const
longBits
static BigInt bigPow10(unsigned short pow)
bigPow10
BigInt & pow(uIntMpz pow)
int sizeBits() const
sizeBits
void fromHex(const std::string &hex)
void mpz_and(mpz_t r, const mpz_t u, const mpz_t v)
uIntMpz mpz_tdiv_q_ui(mpz_t q, const mpz_t n, uIntMpz d)
void mpz_tdiv_r(mpz_t r, const mpz_t n, const mpz_t d)
void mpz_ui_sub(mpz_t r, uIntMpz a, const mpz_t b)
void mpz_sub_ui(mpz_t r, const mpz_t a, uIntMpz b)
void mpz_pow_ui(mpz_t r, const mpz_t b, uIntMpz e)
int mpz_set_str(mpz_t r, const char *sp, int base)
int mpz_cmp_si(const mpz_t u, intMpz v)
void mpz_init2(mpz_t r, mp_bitcnt_t bits)
void mpz_add(mpz_t r, const mpz_t a, const mpz_t b)
uIntMpz mpz_tdiv_r_ui(mpz_t r, const mpz_t n, uIntMpz d)
mp_limb_t mpn_rshift(mp_ptr rp, mp_srcptr up, mp_size_t n, unsigned int cnt)
void mpz_gcd(mpz_t g, const mpz_t u, const mpz_t v)
void mpz_set_si(mpz_t r, intMpz x)
void mpz_powm(mpz_t r, const mpz_t b, const mpz_t e, const mpz_t m)
void mpz_ior(mpz_t r, const mpz_t u, const mpz_t v)
void mpz_mul(mpz_t r, const mpz_t u, const mpz_t v)
mp_limb_t mpn_lshift(mp_ptr rp, mp_srcptr up, mp_size_t n, unsigned int cnt)
char * mpz_get_str(char *sp, int base, const mpz_t u)
void mpz_com(mpz_t r, const mpz_t u)
int mpz_probab_prime_p(const mpz_t n, int reps)
void mpz_sub(mpz_t r, const mpz_t a, const mpz_t b)
void mpz_add_ui(mpz_t r, const mpz_t a, uIntMpz b)
size_t mpz_size(const mpz_t u)
void mpz_set(mpz_t r, const mpz_t x)
void mpz_neg(mpz_t r, const mpz_t u)
void mpz_mul_ui(mpz_t r, const mpz_t u, uIntMpz v)
void mpz_xor(mpz_t r, const mpz_t u, const mpz_t v)
void mpz_tdiv_q(mpz_t q, const mpz_t n, const mpz_t d)
int mpz_cmp(const mpz_t a, const mpz_t b)
unsigned long long uIntMpz