©Arnaud de Saint Julien -Informatique- MPSI Lycée La Merci 2015-2016 2
n =len(t)
if n == 0:
return None # cas où le tableau est vide
maximum = t[0]
for k in range(1,n):
if t[k] > maximum:
maximum = t[k]
return maximum
Exercice 6 (Liste de nombres premiers) On considère la fonction suivante est_premier qui teste la pri-
malité d’un entier.
def est_premier(n):
if n < 2:
return False
d=2
while d**2 <= n:
if n % d == 0:
return False
d = d + 1
return True
1. Tracer la fonction avec n= 35 et n= 31.
2. Si k>1, on note dkla valeur de la variable dà la fin de la k-ième itération de la boucle while. On
convient que d0= 2. Déterminer dk, en déduire que l’algorithme se termine.
3. Combien de divisions sont nécessaires au pire pour tester la primalité d’un entier naturel n?
4. Peut-on remplacer la boucle while par une boucle for ? Si, oui quel peut-être l’inconvénient ?
5. Écrire une fonction liste_premiers qui prend en argument un entier net renvoie la liste des nombres
premiers inférieurs ou égaux à n.
6. Déterminer une majoration du nombre de divisions effectuées lorsque l’on exécute liste_premiers(n). En
déduire, pour déterminer la liste des nombres premiers inférieurs ou égaux à nsi l’on utilise est_premier.
7. En déduire la complexité de liste_premiers. On pourra utliser librement que si f: [1,+∞[→R+est
une fonction continue et croissante telle que la série Pf(n) diverge, alors :
N
X
k=1
f(k)∼N→+∞ZN
1
f(t) dt.
Remarque : cet algorithme n’est pas très performant, on préfèrera utiliser l’algorithme du crible d’Eratosthène
bien plus efficace, dont la complexité temporelle est quasi-linéaire en O(nln n).
Exercice 7 (Une suite récurrente) Soit ula suite définie par u0= 1 et pour n∈N, un+1 = sin(un).
1. Écrire une fonction nommée suite prenant n∈Nen argument et renvoyant un.
2. Que calcule la fonction suivante :
def mystere(n):
s = 0
for k in range(n+1):
s = s + suite(k)
return s
3. Déterminer en fonction de nle nombre d’additions et de calculs de sinus nécessaires pour calculer
mystere(n).