sciences numériques et technologie (seconde) · Chapitre 4 · Exercice de TD
Le PGCD par soustractions successives
Les boucles · La boucle non bornée : while · niveau 3 (difficile)
Énoncé
L'algorithme d'Euclide repose sur ce fait : si , alors et ont les mêmes diviseurs communs que et .
- Écrire une fonction
pgcd(a, b)qui applique ce principe avec une bouclewhile, en retranchant à chaque tour le plus petit du plus grand jusqu'à ce qu'ils soient égaux. - La tester sur et .
- Pourquoi la boucle se termine-t-elle toujours ?
Corrigé
1.
def pgcd(a, b):
while a != b:
if a > b:
a = a - b
else:
b = b - a
return a
2.
print(pgcd(48, 18)) # 6
print(pgcd(35, 14)) # 7
Déroulé sur : , d'où .
3. La terminaison. À chaque tour, l'un des deux nombres diminue strictement et tous deux restent des entiers strictement positifs. Une suite d'entiers positifs strictement décroissante ne peut être infinie : la boucle s'arrête donc nécessairement.
C'est exactement le raisonnement à tenir devant tout while : identifier une quantité entière positive qui décroît strictement. Sans lui, rien ne garantit que le programme s'arrête. Ici, si l'on écrivait a = a + b par étourderie, la boucle tournerait indéfiniment.
Remarque. La version rapide remplace les soustractions par un reste : while b != 0: a, b = b, a % b.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 14 autres exercices corrigés dans ce chapitre, et 21 à chercher avec le tuteur
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre et la correction filmée du TD : 2 minutes sans compte
Sans compte : le cours, le premier QCM, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.