This is an optional module. It is only available when Python is configured to include it, which requires that the GNU MP software is installed.
This module implements the interface to part of the GNU MP library, which defines arbitrary precision integer and rational number arithmetic routines. Only the interfaces to the integer (mpz_*()) routines are provided. If not stated otherwise, the description in the GNU MP documentation can be applied.
Support for rational numbers can be implemented in Python. For an example, see the Rat module, provided as Demos/classes/Rat.py in the Python source distribution.
In general, mpz-numbers can be used just like other standard
Python numbers, e.g., you can use the built-in operators like
*, etc., as well as the standard built-in functions like
abs(), int(), ..., divmod(),
pow(). Please note: the bitwise-xor
operation has been implemented as a bunch of ands,
inverts and ors, because the library lacks an
mpz_xor() function, and I didn't need one.
You create an mpz-number by calling the function mpz() (see
below for an exact description). An mpz-number is printed like this:
A number of extra functions are defined in this module. Non mpz-arguments are converted to mpz-values first, and the functions return mpz-numbers.
|base, exponent, modulus)|
pow(base, exponent) % modulus. If
exponent == 0, return
mpz(1). In contrast to the C library function, this version can handle negative exponents.
(g, s, t), such that
a*s + b*t == g == gcd(a, b).
(root, remainder), such that
root*root + remainder == op.
|numerator, denominator, modulus)|
q * denominator % modulus == numerator. One could also implement this function in Python, using gcdext().
An mpz-number has one method:
The mpz-number must have a value greater than or equal to zero, otherwise ValueError will be raised.