informatique (tronc commun des prépas scientifiques) · Chapitre 1 · Exercice de TD
Variant non trivial — l'algorithme d'Euclide
La discipline de programmation · niveau 2
Énoncé
Prouver la terminaison de la boucle while suivante en exhibant un variant :
def pgcd(a: int, b: int) -> int:
while b > 0:
a, b = b, a % b
return aCorrigé
Démonstration : Choisissons pour variant la valeur de la variable b.
- Positivité : Tant que la boucle s'exécute, la condition
b > 0garantit que notre variant reste strictement positif. - Décroissance : À chaque itération de la boucle, la valeur de
best remplacée para % b. Par définition mathématique de la division euclidienne, le reste appartient à l'ensemble . Le nouveaubest donc strictement inférieur à l'ancien. La suite des valeurs successives prises parbest une suite d'entiers naturels strictement décroissante, ce qui prouve la terminaison de la boucle.
Exercices semblables
- Le contrat ambigu corrigé
- Invariant du maximum corrigé
- Le test de propriété corrigé
- La boucle qui ne termine pas toujours corrigé
- Spécification, tests et preuve d'un algorithme corrigé