79 integer(
const std::string& s)
noexcept { mpz_init_set_str(
m_val, s.c_str(), 10); }
103 mpz_set_si(
m_val, i);
110 inline void set_ui(uint64_t i)
noexcept {
112 mpz_set_ui(
m_val, i);
121 mpz_set(
m_val, i.m_val);
128 inline void set_str(
const std::string& s)
noexcept {
130 mpz_set_str(
m_val, s.c_str(), 10);
169 {
return mpz_cmp_si(
m_val, i) == 0; }
184 {
return mpz_cmp(
m_val, i.m_val) == 0; }
193 {
return not (*
this == i); }
208 {
return not (*
this == i); }
217 {
return mpz_cmp_si(
m_val, i) < 0; }
232 {
return mpz_cmp(
m_val, i.m_val) < 0; }
241 {
return mpz_cmp_si(
m_val, i) <= 0; }
256 {
return mpz_cmp(
m_val, i.m_val) <= 0; }
265 {
return mpz_cmp_si(
m_val, i) > 0; }
280 {
return mpz_cmp(
m_val, i.m_val) > 0; }
289 {
return mpz_cmp_si(
m_val, i) >= 0; }
304 {
return mpz_cmp(
m_val, i.m_val) >= 0; }
315 {
integer a(*
this); a += i;
return a; }
330 {
integer a(*
this); a += i;
return a; }
341 { mpz_add(
m_val,
m_val, i.m_val);
return *
this; }
353 {
integer a(*
this); a -= i;
return a; }
368 {
integer a(*
this); a -= i;
return a; }
379 { mpz_sub(
m_val,
m_val, i.m_val);
return *
this; }
388 {
integer a(*
this); a *= i;
return a; }
403 {
integer a(*
this); a *= i;
return a; }
409 { mpz_mul_si(
m_val,
m_val, i);
return *
this; }
415 { mpz_mul(
m_val,
m_val, i.m_val);
return *
this; }
424 {
integer a(*
this); a /= i;
return a; }
441 {
integer a(*
this); a /= i;
return a; }
452 { mpz_div(
m_val,
m_val, i.m_val);
return *
this; }
476 { mpz_pow_ui(
m_val,
m_val, i);
return *
this; }
494 const uint64_t m = mpz_mod_ui(r,
m_val, i);
523 inline int64_t
to_int() const noexcept {
return mpz_get_si(
m_val); }
541 buf = mpz_get_str(buf, 10,
m_val);
542 s = std::string(buf);
Arbitrary precision integer.
Definition integer.hpp:60
int64_t to_int() const noexcept
Converts this integer to a signed 64-bit integer.
Definition integer.hpp:523
void swap(integer &i) noexcept
Swaps the value of this integer with integer i's value.
Definition integer.hpp:559
friend int64_t operator/(int64_t i, const integer &ii) noexcept
Division operator.
Definition integer.hpp:431
void set_si(int64_t i) noexcept
Overwrites the value of this integer with i.
Definition integer.hpp:101
void set_ui(uint64_t i) noexcept
Overwrites the value of this integer with i.
Definition integer.hpp:110
void as_string(std::string &s) const noexcept
Converts this integer to a string.
Definition integer.hpp:539
friend bool operator>(int64_t i, const integer &ii) noexcept
Greater than operator.
Definition integer.hpp:272
integer operator-() const noexcept
Minus unary operator. Returns a new object of type 'integer'.
Definition integer.hpp:346
integer() noexcept
Empty constructor.
Definition integer.hpp:67
friend bool operator>=(int64_t i, const integer &ii) noexcept
Greater than or equal to operator.
Definition integer.hpp:296
integer(const std::string &s) noexcept
Constructor with string.
Definition integer.hpp:79
integer & powt(const integer &i) noexcept
Exponentiation operator.
integer(const integer &i) noexcept
Copy constructor.
Definition integer.hpp:91
bool operator!=(int64_t i) const noexcept
Non-equality operator.
Definition integer.hpp:192
friend void swap(integer &i, integer &j) noexcept
Swaps two integers.
Definition integer.hpp:567
integer & operator-=(int64_t i) noexcept
Substraction operator.
size_t bytes() const noexcept
Returns the amount of bytes this integer occupies.
void set_str(const std::string &s) noexcept
Overwrites the value of this integer with s.
Definition integer.hpp:128
uint64_t operator%(uint64_t i) const noexcept
Modulus operator.
Definition integer.hpp:491
mpz_t m_val
Structure from GMP storing the integer's value.
Definition integer.hpp:574
uint64_t to_uint() const noexcept
Converts this integer to an unsigned 64-bit integer.
Definition integer.hpp:525
bool m_initialized
Is this integer initialised?
Definition integer.hpp:576
integer & operator*=(int64_t i) noexcept
Product operator.
Definition integer.hpp:408
std::string to_string() const noexcept
Converts this integer to a string.
Definition integer.hpp:530
friend bool operator<(int64_t i, const integer &ii) noexcept
Less operator.
Definition integer.hpp:224
int32_t get_sign() const noexcept
Returns the sign of this integer.
Definition integer.hpp:513
friend integer operator+(int64_t i, const integer &ii) noexcept
Addition operator.
Definition integer.hpp:322
integer(integer &&i) noexcept
Move constructor.
integer & powt(uint64_t i) noexcept
Exponentiation operator.
Definition integer.hpp:475
integer pow(uint64_t i) const noexcept
Exponentiation operator.
Definition integer.hpp:460
void set_integer(const integer &i) noexcept
Overwrites the value of this integer with i.
Definition integer.hpp:119
~integer() noexcept
Destructor.
Definition integer.hpp:93
integer & operator+=(int64_t i) noexcept
Addition operator.
integer(mpz_t &&raw)
Constructor with mpz_t.
bool operator==(int64_t i) const noexcept
Equality operator.
Definition integer.hpp:168
double to_double() const noexcept
Converts this integer to a double-precision floating-point value.
Definition integer.hpp:527
const mpz_t & get_raw_value() const noexcept
Returns the underlying gmp data structure.
Definition integer.hpp:518
integer(int64_t i) noexcept
Constructor with unsigned integer value.
Definition integer.hpp:74
integer & operator/=(int64_t i) noexcept
Division operator.
friend integer operator*(int64_t i, const integer &ii) noexcept
Product operator.
Definition integer.hpp:395
constexpr bool is_initialized() const noexcept
Returns whether this object is initialised or not.
Definition integer.hpp:511
integer & operator=(int64_t i) noexcept
Assignment operator.
Definition integer.hpp:143
friend bool operator<=(int64_t i, const integer &ii) noexcept
Less than or equal to operator.
Definition integer.hpp:248
integer pow(const integer &i) const noexcept
Exponentiation operator.
Definition integer.hpp:466
Exact rational number.
Definition rational.hpp:63
integer integer_from_ui(uint64_t n) noexcept
Make an integer from a 64-bit unsigned integer value.
Definition integer.hpp:583
Main namespace of the library.
Definition definitions.hpp:48