Algorithme d’Euclide🔗

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/env python3
# coding: utf-8

# Time-stamp: <2020-11-16 21:52 ycopin@lyonovae03>

"""
Calcul du PGCD de deux entiers 0 < b < a.
"""

# Entiers dont on calcule le PGCD (avec 0 < b < a)
a = 756
b = 306

# Vérification des conditions d'application de l'algorithme: 0 < b < a
assert 0 < b < a, "Les conditions d'application ne sont pas vérifiées."

a0, b0 = a, b                     # On garde une copie des valeurs originales

# On boucle jusqu'à ce que le reste soit nul, d'où la boucle while. Il faut
# être sûr que l'algorithme converge dans tous les cas!
while True:
    r = a % b
    if r == 0:                  # Reste de la division euclidienne
        break                   # en sortie, PGCD = b
    else:
        a, b = b, r             # Itération

# On aurait pu écrire directement:
# while b != 0:
#     a, b = b, a % b             # en sortie, PGCD = a!

print('Le PGCD de', a0, 'et', b0, 'vaut', b)  # On affiche le résultat
# Vérifications
print(a0 // b, '×', b, '=', (a0 // b * b))  # a//b: division euclidienne
print(b0 // b, '×', b, '=', (b0 // b * b))
$ python3 pgcd.py

Le PGCD de 756 et 306 vaut 18
42 × 18 = 756
17 × 18 = 306

Source: pgcd.py