Adloun

Le PGCD par soustractions successives

Exercice de TD · niveau 3 (difficile) · sciences numériques et technologie (seconde), chapitre 4 — Les boucles · La boucle non bornée : while

Énoncé

L'algorithme d'Euclide repose sur ce fait : si , alors et ont les mêmes diviseurs communs que et .

  1. Écrire une fonction pgcd(a, b) qui applique ce principe avec une boucle while, en retranchant à chaque tour le plus petit du plus grand jusqu'à ce qu'ils soient égaux.
  2. La tester sur et .
  3. 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.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.