(type n)
¶Construct an mpz_class
. All the standard C++ types may be used, except
long long
and long double
, and all the GMP C++ classes can be
used, although conversions from mpq_class
and mpf_class
are
explicit
. Any necessary conversion follows the corresponding C
function, for example double
follows mpz_set_d
(see Assignment Functions).
explicit
mpz_class::mpz_class (const mpz_t z)
¶Construct an mpz_class
from an mpz_t
. The value in z is
copied into the new mpz_class
, there won’t be any permanent association
between it and z.
explicit
mpz_class::mpz_class (const char *s, int base = 0)
¶explicit
mpz_class::mpz_class (const string& s, int base = 0)
¶Construct an mpz_class
converted from a string using mpz_set_str
(see Assignment Functions).
If the string is not a valid integer, an std::invalid_argument
exception is thrown. The same applies to operator=
.
mpz_class
operator"" _mpz (const char *str)
¶With C++11 compilers, integers can be constructed with the syntax
123_mpz
which is equivalent to mpz_class("123")
.
mpz_class
operator/ (mpz_class a, mpz_class d)
¶mpz_class
operator% (mpz_class a, mpz_class d)
¶Divisions involving mpz_class
round towards zero, as per the
mpz_tdiv_q
and mpz_tdiv_r
functions (see Division Functions).
This is the same as the C99 /
and %
operators.
The mpz_fdiv…
or mpz_cdiv…
functions can always be called
directly if desired. For example,
mpz_class q, a, d; ... mpz_fdiv_q (q.get_mpz_t(), a.get_mpz_t(), d.get_mpz_t());
mpz_class
abs (mpz_class op)
¶int
cmp (mpz_class op1, type op2)
¶int
cmp (type op1, mpz_class op2)
¶bool
mpz_class::fits_sint_p (void)
¶bool
mpz_class::fits_slong_p (void)
¶bool
mpz_class::fits_sshort_p (void)
¶bool
mpz_class::fits_uint_p (void)
¶bool
mpz_class::fits_ulong_p (void)
¶bool
mpz_class::fits_ushort_p (void)
¶double
mpz_class::get_d (void)
¶long
mpz_class::get_si (void)
¶string
mpz_class::get_str (int base = 10)
¶unsigned long
mpz_class::get_ui (void)
¶int
mpz_class::set_str (const char *str, int base)
¶int
mpz_class::set_str (const string& str, int base)
¶int
sgn (mpz_class op)
¶mpz_class
sqrt (mpz_class op)
¶mpz_class
gcd (mpz_class op1, mpz_class op2)
¶mpz_class
lcm (mpz_class op1, mpz_class op2)
¶mpz_class
mpz_class::factorial (type op)
¶mpz_class
factorial (mpz_class op)
¶mpz_class
mpz_class::primorial (type op)
¶mpz_class
primorial (mpz_class op)
¶mpz_class
mpz_class::fibonacci (type op)
¶mpz_class
fibonacci (mpz_class op)
¶void
mpz_class::swap (mpz_class& op)
¶void
swap (mpz_class& op1, mpz_class& op2)
¶These functions provide a C++ class interface to the corresponding GMP C
routines. Calling factorial
or primorial
on a negative number
is undefined.
cmp
can be used with any of the classes or the standard C++ types,
except long long
and long double
.
Overloaded operators for combinations of mpz_class
and double
are provided for completeness, but it should be noted that if the given
double
is not an integer then the way any rounding is done is currently
unspecified. The rounding might take place at the start, in the middle, or at
the end of the operation, and it might change in the future.
Conversions between mpz_class
and double
, however, are defined
to follow the corresponding C functions mpz_get_d
and mpz_set_d
.
And comparisons are always made exactly, as per mpz_cmp_d
.