1. A propos de la bibliothèque sympy.ntheory
Sympy.ntheory est une sous-bibliothèque de SymPy, ayant pour principal but de fournir des outils pour aborder la théorie des nombres, une branche des mathématiques pures qui étudie les propriétés des entiers et des nombres en général. la bibliothèque sympy.ntheory fournie un nombre important de packages dotés des fonctions permettant d'analyser, de manipuler et de résoudre des problèmes liés aux nombres premiers, les propriétés des congruences et les fonctions modulaires... Sympy.ntheory constitue une excellente ressource pour les étudiants et les chercheurs, car elle leur permet de résoudre facilement des problèmes classiques de théorie des nombres, grâce à une interface conviviale en Python.
L'une des fonctions les plus intéressantes de sympy.ntheory est la réalisation de tests de primalité probabilistes et déterministes, vous pouvez ainsi récupérer des nombres premiers, vérifier si un nombre particulier est premier ou non, et même décomposer un entier en facteurs premiers. Par conséquent, sympy.ntheory est un excellent outil pour les applications en cryptographie qui nécessitent des nombres premiers comme cœur de tous les calculs.
En outre, la bibliothèque contient des algorithmes efficaces dédiés à des tâches plus spécifiques, comme la recherche de racines modulaires, la décomposition d'entiers en puissances, ou le calcul sur des résidus quadratiques. Elle peut également intervenir pour manipuler des objets plus abstraits comme les classes de restes, les groupes multiplicatifs modulo n, ou certains objets algébriques utilisés en cryptographie.
Enfin, sympy.ntheory s'intègrent dans le reste des modules de SymPy, offrant une approche unifiée du calcul symbolique, numérique, et algébrique.
2. Liste des fonctionnalités offertes par sympy.ntheory
La bibliothèque sympy.ntheory est un outil très riche en fonctionalités liées à la théorie des nombres. En voici une liste de fonctionalités liées à cette bibliothèque:
- Tests de primalité : Détection des nombres premiers (test déterministe ou probabiliste), Tests comme isprime, nextprime, prevprime
- Génération de nombres premiers : Génération du nième nombre premier, génération jusqu’à une borne, produit des premiers dans un intervalle
- Factorisation : Décomposition en facteurs premiers, méthodes de factorisation diverses (division, Pollard, etc.)
- Comptage de nombres premiers : Fonction π(n), approximation de la densité des nombres premiers
- Diviseurs : Liste des diviseurs, nombre de diviseurs, somme des diviseurs
- Fonctions arithmétiques : Fonction de Möbius (μ), fonction indicatrice d’Euler (φ), fonction de Liouville, fonction de Mangoldt
- PGCD et PPCM : Calcul du pgcd, ppcm, algorithme d’Euclide étendu
- Fonctions multiplicatives : Vérification de multiplicativité, produit de Dirichlet
- Congruences : Résolution d’équations de congruences, théorème des restes chinois, systèmes congruentiels
- Calculs modulaires : Inverse modulaire, racines modulaires, groupes multiplicatifs modulo n.
- Équations diophantiennes : Résolution d’équations entières linéaires, représentation d’un entier comme combinaison
- Nombres particuliers : Détection/génération de nombres parfaits, puissants, amicaux, de Mersenne, de Fermat
- Fonctions analytiques : Fonctions asymptotiques, densité des entiers premiers, convolutions arithmétiques
- Algorithmes : Algorithmes de base en arithmétique (gcd, inverses, factorisation, racines modulaires)
- Utilitaires divers : Conversion entre bases, manipulation de grands entiers, outils pour l’arithmétique modulaire
3. Exemples d'usages de la bibliothèque sympy.ntheory
Nous donnons dans ce paragraphe une liste d'exemples illustrant les proporiétés citées dans le paragraphe précédant classés par fonctionnalité.
3.1 Tests de primalité
Exemple
1 2 3 4 5 |
from sympy import isprime, nextprime, prevprime isprime(11) # True nextprime(23) # 29 prevprime(37) # 31 |
3.2 Factorisation
Exemple
1 2 3 4 5 |
from sympy import factorint factorint(126) # {2: 1, 3: 2, 7: 1} factorint(2310) # {2: 1, 3: 1, 5: 1, 7: 1, 11: 1} factorint(900) # {2: 2, 3: 2, 5: 2} |
3.3 Génération et comptage des nombres premiers
Exemple (Génération des nombres premiers)
1 2 3 4 5 |
from sympy import primerange, prime, primorial list(primerange(1, 49)) # [2, 3, 5, 7, 11, ..., 47] prime(25) # 97 (25ème nombre premier) primorial(7, nth=True) # Produit des 7 premiers nombres premiers : 510510 |
Exemple 4 (Comptage de nombres premiers)
1 2 3 |
from sympy import primepi primepi(1000) # 168 |
3.4 Diviseurs d'un entier
Exemple
1 2 3 4 5 |
from sympy import divisors, divisor_count, divisor_sigma divisors(60) # [1, 2, 3, 4, ..., 60] divisor_count(72) # 12 divisor_sigma(1, 90) # Somme des diviseurs : 234 |
3.5 Fonctions arithmétiques
Exemple
1 2 3 4 5 |
from sympy.ntheory import mobius, totient, liouville, mangoldt, divisor_sigma mobius(30) # 1 totient(100) # 40 divisor_sigma(3, 28) # 21532 |
3.5 Calcul du PGCD et PPCM
Exemple
1 2 3 4 5 |
from sympy import gcd, lcm, igcdex gcd(105, 252) # 21 lcm(12, 15) # 60 igcdex(56, 15) # (11, -41, 1) → Bézout : 56*11 + 15*(-41) = 1 |
3.6 Congruences
Exemple (congruence modulo n)
1 2 3 4 |
from sympy.ntheory.modular import solve_congruence solve_congruence((4, 7),) # (18, 7) solve_congruence((2, 3), (3, 5), (2, 7)) # (23, 105) |
Exemple (Calculs modulaires)
1 2 3 4 5 |
from sympy import mod_inverse, sqrt_mod, multiplicative_order mod_inverse(7, 26) # 15 sqrt_mod(9, 13, all_roots=True) # [3, 10] multiplicative_order(2, 17) # 8 |
3.7 Équations diophantiennes
Exemple
1 2 3 4 |
from sympy.solvers.diophantine import diophantine from sympy.abc import x, y diophantine(12*x + 35*y - 1) # {(3 + 35*t, -1 - 12*t)} |
3.8 Nombres particuliers
1 2 3 4 5 6 |
from sympy.ntheory import is_perfect, is_power, mersenne_prime_exponent, is_fermat_prime is_perfect(496) # True is_power(81) # (3, 4) → 81 = 3⁴ [mersenne_prime_exponent(i) for i in range(1, 6)] # [2, 3, 5, 7, 13] is_fermat_prime(65537) # True |
3.9 Fonctions analytiques
1 2 3 4 5 |
from sympy import primepi from sympy.ntheory import mangoldt primepi(10**5) # 9592 mangoldt(16) # log(2) |
4. La théorie des nombres avec sympy.ntheory : guide complet
La bibliothèque sympy.ntheory offre un large éventail de fonctionnalités pour travailler avec les nombres entiers, les diviseurs, les nombres premiers, les congruences, voir toute la théorie des nombres etc.
Voici une vue d’ensemble structurée de toutes les principales fonctionnalités offertes par sympy.ntheory, regroupées par catégories:
4.1 Nombres premiers
Tests de primalité :
- isprime(n) : teste si n est premier.
- nextprime(n) : donne le prochain nombre premier strictement supérieur à n.
- prevprime(n) : donne le plus grand nombre premier strictement inférieur à n.
- prime(n) : renvoie le n-ième nombre premier.
- primerange(a, b) : génère les nombres premiers entre a et b.
- randprime(a, b) : renvoie un nombre premier aléatoire entre a et b.
- primepi(n) : compte le nombre de nombres premiers ≤ n.
- primorial(n) : produit des n premiers nombres premiers.
4.2 Diviseurs et facteurs
Décomposition en facteurs premiers :
- factorint(n) : renvoie un dictionnaire {facteur premier : exposant}.
- divisors(n) : renvoie tous les diviseurs positifs de n.
- proper_divisors(n) : renvoie tous les diviseurs propres de n.
Fonctions arithmétiques classiques :
- totient(n) : fonction d’Euler φ(n).
- mobius(n) : fonction de Möbius μ(n).
- divisor_sigma(n, k) : somme des puissances k-ièmes des diviseurs de n.
- core(n) : partie sans carré de n.
- smoothness(n) : renvoie la plus grande base de facteur premier de n.
4.3 Congruences et résidus
- is_quad_residue(a, p) : vérifie si a est un résidu quadratique modulo p.
- legendre_symbol(a, p) : symbole de Legendre.
- jacobi_symbol(a, n) : symbole de Jacobi.
- kronecker_symbol(a, n) : symbole de Kronecker.
- solve_congruence(*congruences) : résout des systèmes de congruences de type chinois.
- crt(moduli, residues) : théorème des restes chinois.
4.4 Fonctions multiplicatives
- is_multiplicative(f) : teste si une fonction est multiplicative.
- multiplicative_order(a, n) : ordre multiplicatif de a modulo n.
- is_primitive_root(a, n) : teste si a est une racine primitive modulo n.
- primitive_root(n) : renvoie une racine primitive modulo n.
- nthroot_mod(a, n, m) : racine n-ième de a modulo m.
4.5 Algorithmes divers
- gcd(a, b) : plus grand commun diviseur.
- lcm(a, b) : plus petit commun multiple.
- igcdex(a, b) : algorithme d’Euclide étendu : donne le triplet (g, x, y) tel que a*x + b*y = g = gcd(a, b).
- mod_inverse(a, m) : inverse modulaire de a modulo m.
4.6 Nombres particuliers
- is_perfect(n) : teste si un nombre est parfait.
- is_abundant(n) : nombre abondant.
- is_deficient(n) : nombre déficient.
- is_square(n) : teste si n est un carré parfait.
- is_power(n) : teste si n = a^b.
4.7 Fonctions avancées / autres
- continued_fraction_periodic(a, b, c) : fractions continues périodiques.
- digits(n, b=10) : renvoie les chiffres de n en base b.
- frobenius_number(...) : nombre de Frobenius.
- multinomial_coefficients(n) : coefficients multinomiaux.
4.8 Générateurs aléatoires
- generate(n) : génère les n premiers nombres premiers (sous forme de liste).
- randprime(a, b) : génère un nombre premier aléatoire dans un intervalle.
Exemple d’utilisation:
1 2 3 4 5 6 7 8 |
from sympy.ntheory import isprime, primerange, factorint, totient, divisors, legendre_symbol print(isprime(101)) # True print(list(primerange(10, 30))) # [11, 13, 17, 19, 23, 29] print(factorint(60)) # {2: 2, 3: 1, 5: 1} print(totient(9)) # 6 print(divisors(12)) # [1, 2, 3, 4, 6, 12] print(legendre_symbol(5, 11)) # 1 |
Pour explorer toutes les fonctionnalités:
On peux voir la liste complète des objets définis dans sympy.ntheory avec:
1 2 |
import sympy.ntheory as nt print(dir(nt)) |
Explorer les sous-modules plus spécialisés:
1 2 3 4 5 6 7 8 9 |
sympy.ntheory.primetest sympy.ntheory.factor_ sympy.ntheory.residue_ntheory sympy.ntheory.modular sympy.ntheory.generate |
5. Documentation officielle de sympy.ntheory
La documentation officielle du module sympy.ntheory est disponible sur le site de SymPy:
Documentation officielle de sympy.ntheory
Cette page fournit une description complète des fonctionnalités offertes par le module sympy.ntheory, y compris des exemples d'utilisation, des explications détaillées et des références mathématiques.
Younes Derfoufi
CRMEF OUJDA