Adloun

Comparer, sur les mêmes couples, le PGCD par soustractions et…

Exercice supplémentaire · niveau 3 (difficile) · NSI (première), chapitre 3 — Langages et programmation · Ce que l'on ne sait pas décider

Énoncé

Comparer, sur les mêmes couples, le PGCD par soustractions et l'algorithme d'Euclide par restes (a, b = b, a % b). Vérifier les deux, compter les tours, et trouver les couples pour lesquels Euclide est le plus lent.

Corrigé


def pgcd_euclide(a, b):
    """PGCD par restes. Rend (pgcd, nombre de tours).

    Precondition : a >= 1 et b >= 1.
    Invariant    : pgcd(a, b) est inchange, car pgcd(a, b) = pgcd(b, a % b).
    Variant      : b, entier positif strictement decroissant.
    """
    assert a >= 1 and b >= 1
    tours = 0
    while b != 0:
        a, b = b, a % b
        tours = tours + 1
    return a, tours

for a in range(1, 120):
    for b in range(1, 120):
        assert pgcd_euclide(a, b)[0] == math.gcd(a, b)

Les cas passent, et pgcd_euclide(48, 18) rend (6, 3) — trois tours contre quatre pour les soustractions.

L'écart, lui, est sans commune mesure. Sur : 999 tours par soustractions, 2 par Euclide. La raison tient à la ligne a, b = b, a % b : le reste fait d'un coup ce que les soustractions font une par une. Le variant est au moins divisé par deux tous les deux tours, alors que ne diminuait que de par tour.

Le pire cas d'Euclide. Il est atteint sur les couples de nombres de Fibonacci consécutifs : demande tours, autant que les soustractions — c'est le seul type de couple où les deux méthodes coïncident, précisément parce que chaque reste y est le terme précédent de la suite. C'est le résultat de Gabriel Lamé (1844), l'une des premières analyses de coût d'un algorithme.

L'affectation multiple a, b = b, a % b est celle du chapitre 4 : le membre de droite est évalué entièrement d'abord, ce qui évite la variable temporaire. Écrire les deux affectations à la suite, dans le mauvais ordre, donnerait un résultat faux.

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.