Adloun

Python (école d'ingénieur) · Chapitre 2 · Exercice

Algorithme d'Euclide

Structures de contrôle : conditions et boucles

Énoncé

Écrire une fonction pgcd(a, b) calculant le Plus Grand Commun Diviseur par l'algorithme d'Euclide. Prouver sa correction par invariant.

Corrigé

def pgcd(a, b):
    """
    Algorithme d'Euclide : pgcd(a, b) = pgcd(b, a mod b)
    Invariant : pgcd(a, b) = pgcd(a_initial, b_initial) à chaque étape
    """
    a, b = abs(a), abs(b)
    while b != 0:
        # Invariant : pgcd(a, b) = pgcd(original_a, original_b)
        a, b = b, a % b
    return a

Preuve par invariant : Soit la valeur recherchée. Invariant : À chaque entrée de la boucle, .

  • Initialisation : Avant la boucle, , donc .
  • Conservation : Si , alors car et tout diviseur commun de et divise aussi , et réciproquement.
  • Terminaison : diminue strictement à chaque itération (car ) et reste positif ou nul. Le variant est , qui est une suite décroissante d'entiers naturels, donc finie.

Quand , , donc .

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →