15.3 mpz --- Entiers de taille arbitraire

C'est un module optionnel. Il n'est disponible que si Python est configuré pour l'inclure, ce qui nécessite que la librairie GNU MP soit installée.

Ce module implémente l'interface avec une partie de la librairie GNU MP, qui définit des routines d'arithmétique des entiers de précision arbitraire et des nombres rationnels. Seules les interfaces vers les routines entières(mpz_*()) sont fournies. Sauf indication contraire, la description de la documentation GNU MP s'applique.

Le support pour les nombres rationnels peut être implémenté en Python. Pour un exemple, voir le module Rat, fourni dans Demos/classes/Rat.py dans la distribution source de Python.

En général, les nombres mpz peuvent être utilisés exactement comme les autres nombres Python standard ; par exemple, vous pouvez utiliser les opérateurs intégré comme +, *, etc., de même que les fonctions intégrées standard comme abs(), int(), ..., divmod(), pow(). N.B.: l'opération bitwise-xor a été implémentée en assemblant des ands, des inverts et des ors, parce que la librairie ne dispose pas d'une fonction mpz_xor(), et que je n'en avais pas besoin.

Vous créez un nombre mpz en appelant la fonction mpz() (voir ci-dessous pour une description exacte). Un nombre mpz est imprimé ainsi : mpz(value).

mpz(valeur)
Crée un nouveau nombre mpz. valeur peut être un entier normal, un entier long, un autre nombre mpz, ou même une chaîne de caractères. S'il s'agit d'une chaîne de caractères, elle est interprétée comme un tableau de chiffres en base 256, chiffre le moins significatif en premier, et produit un nombre positif. Voir aussi la méthode binary(), décrite ci-dessous.

MPZType
Le type des objets retournés par la fonction mpz() et par la plupart des autres fonctions de ce module.

Un certain nombre de fonctions supplémentaires sont définies dans ce module. Les arguments non-mpz sont d'abord convertis en valeurs mpz, et les fonctions retournent des nombres mpz.

powm(base, exposant, modulo)
Retourne pow(base, exposant) % modulo. Si exposant == 0, retourne mpz(1). Contrairement à la fonction de la librairie C, cette version peut traiter les exposants négatifs.

gcd(op1, op2)
Retourne le Plus Grand Commun Dénominateur (PGCD) de op1 et op2.

gcdext(a, b)
Retourne un tuple (g, s, t), tel que a*s + b*t == g == gcd(a, b).

sqrt(op)
Retourne la racine carrée de op. Le résultat est arrondi à l'entier inférieur.

sqrtrem(op)
Retourne un tuple (racine, reste), tel que racine*racine + reste == op.

divm(numerateur, denominateur, modulo)
Retourne un nombre q tel que q * denominateur % modulo == numerateur. On pourrait aussi implémenter cette fonction en Python, en utilisant gcdext().

Un nombre mpz possède une méthode:

mpzbinary()
Convertit ce nombre mpz en une chaîne binaire, où le nombre a été stocké sous forme d'un tableau de chiffres en base 256, chiffre le moins significatif en premier.

Le nombre mpz doit avoir une valeur supérieure ou égale à zéro, sinon ValueError sera déclenchée.