Adloun

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 a

Corrigé

Démonstration : Choisissons pour variant la valeur de la variable b.

  1. Positivité : Tant que la boucle s'exécute, la condition b > 0 garantit que notre variant reste strictement positif.
  2. Décroissance : À chaque itération de la boucle, la valeur de b est remplacée par a % b. Par définition mathématique de la division euclidienne, le reste appartient à l'ensemble . Le nouveau b est donc strictement inférieur à l'ancien. La suite des valeurs successives prises par b est une suite d'entiers naturels strictement décroissante, ce qui prouve la terminaison de la boucle.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre