1. À propos de sympy.is_prime()
sympy.is_prime() est une fonction du module sympy (bibliothèque de calcul symbolique en Python) qui permet de tester si un nombre entier est premier ou non.
Contrairement à une simple boucle de division, cette fonction utilise des algorithmes optimisés et déterministes pour les nombres de taille raisonnable, et probabilistes pour les très grands nombres.
Elle retourne True si le nombre est premier, False sinon. Elle gère également les nombres négatifs (retourne False) et les cas particuliers (0, 1).
sympy.is_prime() est l'outil idéal pour tester la primalité en Python :
- Rapide et optimisé (algorithmes éprouvés).
- Facile à utiliser (une seule ligne).
- Polyvalent (petits et grands nombres).
- Intégré à l'écosystème sympy.
2. Installation et import de sympy
Avant d'utiliser is_prime(), vous devez installer la bibliothèque sympy via pip puis l'importer dans votre script.
2.1. Installation
|
1 |
pip install sympy |
2.2. Importation
|
1 2 |
import sympy as sp from sympy import is_prime |
L'import direct de is_prime permet d'utiliser la fonction sans préfixe.
3. Syntaxe et paramètres
La syntaxe de sympy.is_prime() est très simple :
|
1 |
sympy.is_prime(n) |
Où n est un entier (type int ou Integer de sympy). Aucun autre paramètre n'est nécessaire.
4. Exemples de base
Testons quelques nombres premiers et composés pour illustrer le fonctionnement.
4.1. Nombres premiers classiques
|
1 2 3 4 5 6 7 |
from sympy import is_prime print(is_prime(2)) # True print(is_prime(3)) # True print(is_prime(5)) # True print(is_prime(7)) # True print(is_prime(11)) # True |
Sortie :
|
1 2 3 4 5 |
True True True True True |
4.2. Nombres composés
|
1 2 3 4 5 |
print(is_prime(4)) # False print(is_prime(6)) # False print(is_prime(9)) # False print(is_prime(15)) # False print(is_prime(21)) # False |
Sortie :
|
1 2 3 4 5 |
False False False False False |
5. Cas particuliers : 0, 1 et nombres négatifs
La fonction is_prime() gère correctement les cas limites :
|
1 2 3 4 |
print(is_prime(0)) # False print(is_prime(1)) # False print(is_prime(-5)) # False print(is_prime(-2)) # False |
Sortie :
|
1 2 3 4 |
False False False False |
6. Test sur de grands nombres
is_prime() est efficace même pour des nombres de plusieurs centaines de chiffres. Elle utilise l'algorithme Miller-Rabin déterministe pour les nombres < 2^64 et des tests probabilistes pour les plus grands.
|
1 2 |
grand_nombre = 10**30 + 7 # 1 000 000 000 000 000 000 000 000 000 007 print(is_prime(grand_nombre)) |
Sortie (peut varier selon la machine) :
|
1 |
False |
7. Comparaison avec une boucle naïve
Pour illustrer l'intérêt de is_prime(), comparons son temps d'exécution avec une fonction de primalité naïve (division jusqu'à √n).
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import time from sympy import is_prime def naive_is_prime(n): if n < 2: return False for i in range(2, int(n**0.5) + 1): if n % i == 0: return False return True n = 10**7 + 19 # 10 000 019 start = time.time() print("Naïve :", naive_is_prime(n)) print("Temps :", time.time() - start) start = time.time() print("sympy :", is_prime(n)) print("Temps :", time.time() - start) |
Sortie (exemple) :
|
1 2 3 4 |
Naïve : True Temps : 0.4234 sympy : True Temps : 0.0012 |
On constate que is_prime() est bien plus rapide pour les grands nombres.
8. Utilisation avec des nombres de type sympy.Integer
is_prime() accepte aussi les objets Integer de sympy, ce qui est pratique pour le calcul symbolique.
|
1 2 3 4 |
from sympy import Integer, is_prime n_sym = Integer(97) print(is_prime(n_sym)) # True |
Sortie :
|
1 |
True |
9. Limites et précautions
Bien que is_prime() soit très fiable, pour des nombres extrêmement grands (plus de 10^30), elle utilise un test probabiliste Miller-Rabin avec un certain nombre de bases. La probabilité d'erreur est négligeable, mais elle n'est pas nulle. Pour un usage cryptographique, privilégiez des tests déterministes ou certifiés.
De plus, la fonction peut lever une exception ValueError si l'argument n'est pas un entier.
|
1 2 3 4 |
try: is_prime(3.14) except ValueError as e: print("Erreur :", e) |
Sortie :
|
1 |
Erreur : is_prime() expects an integer, got 3.14 |
Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/



