Un nombre premier est un entier positif qui admet exactement deux diviseurs entiers et positifs distincts : \(1\) et lui-même. Ainsi :
\(0\) n'est pas premier car il est divisible par tous les entiers non nuls ;
\(1\) n'est pas premier car il n'admet que lui même comme diviseur ;
\(2\) est premier car il n'est divisible que par \(1\) et \(2\) ;
\(6\) n'est pas premier car il admet quatre diviseurs : \(1\), \(2\), \(3\) et \(6\).
Divisibilité
\(a\) est divisible par \(b\) si le reste de la division euclidienne de \(a\) par \(b\) vaut \(0\).
Avec Python l'expression a%b est alors évaluée à 0.
Cette définition permet de formuler un test de primalité simple. Considérons un nombre entier positif \(n\) :
Si \(n\) est strictement inférieur à \(2\), il n'est pas premier ;
Sinon, si \(n\) est divisible par l'un des entiers compris entre \(2\) et \(\sqrt{n}\) (inclus l'un et l'autre), alors il n'est pas premier ;
Dans le cas contraire, \(n\) est premier.
On demande d'écrire la fonction est_premier qui prend en paramètre un entier \(n\) positif ou nul et renvoie True si ce nombre est premier, False dans le cas contraire.
Deux versions, construites autour de boucles for ou while, sont proposées.
Une première approche consiste à utiliser une boucle for afin de parcourir tous les diviseurs potentiels de \(n\) entre \(2\) et \(\sqrt{n}\) (inclus l'un et l'autre).
La fonction permettant de calculer la racine carrée d'un nombre positif fait partie du module math. Elle est importée au début de cette version de l'exercice : frommathimportsqrt.
Attention toutefois, cette fonction renvoie toujours un nombre flottant : sqrt(5) est évalué à environ 2.23606797749979.
On peut néanmoins arrondir ce résultat à l'entier inférieur ou égal en utilisant int : int(sqrt(5)) est évalué à 2.
On rappelle de plus que l'instruction range(5,12) parcourt les entiers entre 5 (inclus) et 12 (exclu).
###(Dés-)Active le code après la ligne # Tests (insensible à la casse) (Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Le calcul d'une racine carrée est coûteux. Il est possible de s'en passer en observant que si \(d\) est un entier positif tel que \(d \le \sqrt{n}\) alors on a nécessairement \(d^2 \le n\).
Cette observation permet de parcourir tous les diviseurs souhaités à l'aide d'une boucle while.
###(Dés-)Active le code après la ligne # Tests (insensible à la casse) (Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
# Tests
(insensible à la casse)(Ctrl+I)