Nombre d'opérations et temps de calcul
Exercice supplémentaire · niveau 3 (difficile) · sciences numériques et technologie (seconde), chapitre 4 — Les boucles · La boucle bornée : for
Énoncé
Comparer le nombre de tours de ces deux façons de tester si n est premier, pour (qui est premier). Mesurer avec le module time.
# version A : on divise par tous les entiers jusqu'à n-1
# version B : on s'arrête dès que d*d > nCorrigé
import time
def premier_A(n):
for d in range(2, n):
if n % d == 0:
return False
return True
def premier_B(n):
d = 2
while d * d <= n:
if n % d == 0:
return False
d = d + 1
return True
n = 1000003
debut = time.time()
print(premier_B(n), time.time() - debut) # True, moins d'un millième de seconde
La version B effectue au plus tours ; la version A en effectue près d'un million — mille fois plus.
Justification de l'arrêt à : si avec , alors . Tout nombre composé possède donc un diviseur inférieur ou égal à sa racine carrée ; n'en avoir trouvé aucun suffit à conclure.
On touche ici à la complexité d'un algorithme : deux programmes justes ne se valent pas.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.