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
- 4 autres exercices corrigés dans ce chapitre, et 5 à chercher avec le tuteur
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.