Devoir Maison sur feuille : nombres premiers.
Pour le 9 janvier.
Informatique Pour Tous - 2016/2017
Si vous ne l’avez pas d´ej`a fait, et si vous en avez la possibilit´e, il est fortement conseill´e de
t´el´echarger Pyzo, en allant sur http://test.pyzo.org/downloads.html. Si par exemple vous
avez Windows, vous pouvez t´el´echarger win64.zip, dezipper et ensuite ex´ecuter pyzo.exe dans le
dossier d´ezipp´e. Vous pourrez ainsi tester vos r´eponses dans Pyzo. Le DM doit cependant ˆetre
rendu ´ecrit, sur papier.
On rappelle qu’un entier naturel est premier lorsqu’il a exactement deux diviseurs : 1 et lui-
mˆeme. Si aet bsont deux entiers, on rappelle que a // b et a%bdonnent le quotient et le
reste de la division euclidienne de apar b, respectivement.
1. (a) ´
Ecrire une fonction divise qui prend deux entiers naturels a, b en arguments avec a
non nul et renvoie True si adivise b,False sinon.
(b) ´
Ecrire une fonction diviseurs qui prend un entier naturel non nul nen argument et
renvoie la liste des diviseurs de n.
(c) ´
Ecrire une fonction premier qui prend un nombre en argument et renvoie True si ce
nombre est premier, False sinon.
(d) ´
Ecrire une fonction tous_premiers qui prend un entier naturel nen argument et
renvoie la liste de tous les nombres premiers inf´erieurs ou ´egaux `a n.
(e) Quelle est la complexit´e dans le pire des cas de tous_premiers ? On admettra que
les op´erations a // b et a%bde python ont chacune une complexit´e O(ln(a)).
2. Le crible d’´
Eratosth`ene est un algorithme beaucoup plus efficace pour obtenir la liste des
nombres premiers inf´erieurs `a un entier n.
On part d’une liste Lde taille n+ 1 dont tous les ´el´ements sont des bool´eens de valeur
True. On modifie la valeur de L[0] et L[1] `a False. Puis pour chaque i entre 2 et b√nc,
si L[i] contient True, alors pour chaque kmultiple de iet strictement sup´erieur `a i, on
modifie L[k] en False. A la fin, L[i] ´egal True si iest premier, False sinon. On pourra
´ecrire int(x) pour calculer la partie enti`ere d’un flottant x.
(a) ´
Ecrire une fonction eratosthene qui prend un nombre nen argument et renvoie la
liste Ld´ecrite ci-dessus.
(b) En utilisant la fonction eratosthene, ´ecrire une fonction tous_premiers2 qui prend
un entier naturel nen argument et renvoie la liste de tous les nombres premiers
inf´erieurs ou ´egaux `a n.
(c) Quelle est la complexit´e dans le pire des cas de tous_premiers2 ? Comparer avec
tous_premiers. Si vous avez acc`es `a Pyzo, vous pouvez comparer experimentalement
le temps d’ex´ecution des deux fonctions : par exemple, ´ecrire
1