Académique Documents
Professionnel Documents
Culture Documents
Algorithmique
Nombre premier
Un nombre premier est un entier naturel qui admet exactement deux diviseurs distincts entiers
et positifs (qui sont alors 1 et lui-même).
Par opposition, un nombre non nul produit de deux nombres entiers différents de 1 est dit com-
posé.
Thèmes
Arithmétique (nombres premiers et composés, divisibilité), tests de primalité, fonctions ren-
voyant une valeur booléenne, test dans une boucle avec une fonction booléenne.
http ://www.math93.com/images/pdf/algo_Python/Td_Algorithmes_TD_Test_Primalite.pdf
Remarque
La fonction renvoie une valeur booléenne, c’est-à-dire ou bien True ou bien False. On remarque
que dès qu’on trouve un diviseur d on renvoie False : l’instruction return permet à la fois de
renvoyer le résultat attendu et d’interrompre l’itération.
Remarque
Quand on divise deux entiers n et i , n%i renvoie le reste de la division euclidienne de n par i ,
n//i renvoient le quotient alors que n/i renvoie le quotient décimal.
1. Le site math93 propose la liste des 168 nombres premiers inférieurs à 1 000 et un lien vers le site compoassoe qui
donne la liste des nombres premiers inférieurs à 1 000 milliards..
Tester l’algorithme avec des nombres premiers et des nombres composés ayant 4, 5 et 6 chiffres.
2. Modifier l’algorithme afin que la fonction renvoie aussi une décomposition de l’entier n, par exemple prem(18)
doit renvoyer (False,9,2) et prem(13) doit renvoyer (True,13,1). Tester-le avec un nombre composé, produit de deux
nombres premiers à 5 chiffres comme par exemple : n = 28 537 × 28 603 = 816 243 811.
Code Python
def prem(n) :
’ ’ ’ ................ ’ ’ ’
assert n >= 2
# À compléter.
TD n°1 - Test Primalité - Algorithmique
Puisque on a choisi le plus petit diviseur d ; on constate alors que d × d ≤ n. Pour tester si n est premier, il suffit donc
de tester sa divisibilité par les entiers dont le carré est inférieur ou égal à n.
4. On peut tester nos deux fonctions prem et prem2 avec un nombre premier ayant de nombreux chiffres. Vérifier
l’efficacité de la fonction prem2 avec l’entier premier à 15 chiffres, découvert en 1850 par le danois, Thomas Clausen :
67280421310721 , (copier/coller : 67280421310721).
f (n) = n 2 − n + 41
Léonhard EULER(1707-1783)
5. On a vu lors du TD n°1 sur les fonctions que f renvoyait des nombres premiers pour de nombreuses valeurs en-
tières, mais pas pour toutes.
Compléter cet algorithme afin qu’il affiche la première valeur entière dont l’image par la fonction f est un nombre
composé, ainsi que son image.
On introduira une fonction sans argument, premierCompose() qu’il suffira d’appeler dans la console.
Code Python
def premierCompose()
i =0
while · · · · · · : # À compléter.
i = i +1
return · · · · · ·
7. Écrire une fonction tableauprem(n,f ) qui donne le tableau de valeurs d’une fonction f (comme dans le TD n°1 du
thème Fonction), pour x entier variant de 0 à n, avec un test de primalité pour chacune des images et un affichage
adapté. La fonction sera de paramètres n et f .
Par exemple tableauprem(5,f ) doit renvoyer :
Code Python
def tableauprem(n, f ) : # À compléter.
8. Sur le modèle de la fonction prem2(n), écrire une fonction prem3(n) qui évalue la primalité de n, en effectuant un
cas particulier avec d = 2 puis en ne testant que les diviseurs impairs, avec d = 3 puis avec d ← d + 2.
Code Python
def prem3(n) : # Á compléter
’ ’ ’renvoie True si l’entier est premier et False sinon’ ’ ’
[ Fin du devoir \