21 mpz_init2(data,
static_cast<unsigned int>(bitCount));
41 BigInt(std::string(size, item),base) {
46 std::string result = str;
74 return static_cast<int>(
mpz_size(data) *
sizeof ((*data->_mp_d)));
78 return static_cast<int>(
getString(2).size());
82 return static_cast<int>(std::ceil(
static_cast<double>(
longBits()) / 8));
85#define GMP_ABS(x) ((x) >= 0 ? (x) : -(x))
87 return static_cast<int>(
static_cast<size_t>(
GMP_ABS( data->_mp_alloc)) *
88 sizeof ((*data->_mp_d)));
107 return "1" + std::string(
pow,
'0');
138 return left -= std::abs(right);
142 return right += left;
146 mpz_add(left.data, left.data, right.data);
151 return left +=
BigInt(right);
155 return BigInt(left) + right;
163 return left -= std::abs(right);
167 mpz_add(left.data, left.data, right.data);
172 return left +=
BigInt(right);
178 mpz_sub(left.data, left.data, right.data);
187 return left += std::abs(right);
195 return right += std::abs(left);
204 return left -=
BigInt(right);
208 return BigInt(left) - right;
212 mpz_sub(left.data, left.data, right.data);
217 return left -=
BigInt(right);
225 return left += std::abs(right);
245 return left /=
BigInt(right);
249 return BigInt(left) / right;
253 return BigInt(left) / right;
262 return left /=
BigInt(right);
276 mpz_mul(left.data, left.data, right.data);
290 return right *= left;
294 return right *=
BigInt(left);
298 return left *=
BigInt(right);
302 mpz_mul(left.data, left.data, right.data);
307 return left *=
BigInt(right);
331 return BigInt(left) % right;
335 return left %=
BigInt(right);
339 return BigInt(left) % right;
353 return left %=
BigInt(right);
386 static_cast<unsigned int>(std::abs(right)));
390 return left << right;
398 static_cast<unsigned int>(std::abs(right)));
402 return left >> right;
410 static_cast<unsigned int>(std::abs(right)));
414 return left <<= right;
422 static_cast<unsigned int>(std::abs(right)));
426 return left >>= right;
436 mpz_ior(left.data, left.data, right.data);
441 return left |
BigInt(right);
445 mpz_ior(left.data, left.data, right.data);
450 return left |=
BigInt(right);
454 mpz_and(left.data, left.data, right.data);
459 return left &
BigInt(right);
464 mpz_and(left.data, left.data, right.data);
469 return left &=
BigInt(right);
473 mpz_xor(left.data, left.data, right.data);
478 return left ^
BigInt(right);
482 mpz_xor(left.data, left.data, right.data);
487 return left ^=
BigInt(right);
498 return mpz_cmp(left.data, right.data) == 0;
506 return left ==
BigInt(right);
510 return right == left;
514 return right ==
BigInt(left);
518 return !(left == right);
522 return !(left == right);
526 return left !=
BigInt(right);
530 return right != left;
534 return right !=
BigInt(left);
538 return mpz_cmp(left.data, right.data) < 0;
546 return left <
BigInt(right);
554 return right >
BigInt(left);
558 return mpz_cmp(left.data, right.data) > 0;
566 return left >
BigInt(right);
574 return right <
BigInt(left);
578 return mpz_cmp(left.data, right.data) <= 0;
586 return left <=
BigInt(right);
590 return right >= left;
594 return right >=
BigInt(left);
598 return mpz_cmp(left.data, right.data) >= 0;
606 return left >=
BigInt(right);
610 return right <= left;
614 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
Returns the current length of the number in bits.
static BigInt bigPow10(unsigned short pow)
Returns 10 raised to the power of pow (10 ^ pow).
BigInt & pow(uIntMpz pow)
int sizeBits() const
Returns the size of the number in bits.
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