|
|||||||||||||||||||||||||||||||||
![]()
|
ALGORITHME
D'EUCLIDE pour le calcul du PGCD Plus Grand Commun Diviseur Description de l'algorithme d'Euclide. Exemple de présentation d'un algorithme. |
Voir Algorithme d'Euclide
(Terminale)
|
Les deux méthodes : soustractions ou divisions |
||
|
Les deux versions de l’algorithme d’Euclide — par
soustractions et par divisions euclidiennes — ne sont pas deux méthodes
différentes, mais deux formulations du même principe mathématique. En fait, l’une est un cas particulier (ou une
version répétée) de l’autre. |
||
|
Version
« soustractions successives » Elle repose sur l’idée suivante : Tant que les deux nombres ne sont pas égaux, on
remplace le plus grand par sa différence avec le plus petit. Mathématiquement, remplacer a par a – b ne
change pas le PGCD. Mais si a est beaucoup plus grand que b, on
doit faire beaucoup de soustractions. |
Version
« division euclidienne » Elle utilise une observation plus fine : Au lieu de soustraire b
plusieurs fois, on calcule directement le reste de la division de a par b. Autrement dit : A = b·q + r => PGCD(a, b) = PGCD(b, r) Cette
version remplace des dizaines de soustractions par un seul calcul de reste. |
|
|
Exemple Pour a = 48 et b = 18 |
Exemple Pour a = 48 et b = 18 |
|
|
Dans les deux cas, on obtient 12, le
même reste. Donc : La version « division » est
simplement la version « soustraction » accélérée. |
||
|
Code
Python def pgcd(a, b): while a != b: if a > b: a = a - b else: b = b - a return a # Exemple
d'utilisation print(pgcd(144, 54)) Résultat : 18
|
Code
Python def pgcd(a, b):
while b != 0: a, b = b, a % b
return a # Exemple d'utilisation print(pgcd(144, 54)) Résultat : 18 |
|
|
|
||
|
|
|
|
|
|
||
|
|
Principe
et exemple
|
|
|
|
|
|
A = 33 810 = 1 x 2 x 3 x 5 x 7 x 7 x 23 B = 4 116
= 1 x 2 x 3 x 7 x 7 x 7 PGCD (A, B) = 1 x 2 x 3 x 7 x 7 = 294 |
|
|
Départ |
Division de A par B. |
A = Bq + r |
|
|
1 – Cas n°1 |
|||
|
Si r = 0 |
Alors B divise A. |
g = B |
|
|
2 – Cas n°2 |
|||
|
Si r |
Si g existe, il divise A (a= g.a) et B (B=g.b) Or, tout diviseur g, commun à A et B,
divise aussi r, selon la démonstration ci-contre. |
A – Bq = r g.a – g.b.q = r g(a – b.q) = r g(a – b.q) = g.s r = g.s |
|
|
Autrement
dit |
Tout diviseur g, commun à B et r,
divise aussi A. |
Bq + r = A |
|
|
31 – Nouveau problème |
|||
|
|
Cherchez les diviseurs communs à B et
r. Tous deux sont plus petits que les
nombres A et B initiaux. Le problème est simplifié. |
r < B < A |
|
|
Poursuivons |
On réalise les divisions successives. Les restes vont en diminuant. |
A = Bq + r B = rq1 + r1 r = r1 q2
+ r2 r1 = r2
q3 + r3 … rn-1 = rn
qn+1 + rn+1 |
|
|
32 – Deux cas possibles |
|||
|
Si rn+1 = 0 |
Les diviseurs cherchés sont ceux de rn |
rn divise rn-1 |
|
|
|
Et … |
g = rn |
|
|
Si rn+1 = 1 |
Les diviseurs communs à A et B sont les diviseurs communs à rn
et à 1. |
A et B
sont premiers entre eux. g = 1. |
|
|
|
|
|
Organigramme
- Anglais: flow chart
|
|
|
|
||
|
A := 8136: B := 492: C := 1: while C<>0 do C := A mod(B): lprint(A,B,C): A := B: B := C: od: 8136, 492, 264 492, 264, 228 264, 228, 36 228, 36, 12 36, 12, 0 Autre
exemple d'exécution 454545545454, 531441, 338067 531441, 338067, 193374 338067, 193374, 144693 193374, 144693, 48681 144693, 48681, 47331 48681, 47331, 1350 47331, 1350, 81 1350, 81, 54 81, 54, 27 54, 27, 0 |
C
est différent de 0.
|
|
|
Langage type Maple: voir
Convention
de notations / Programmation |
||
|
|
||
|
Appliquez l'algorithme d'Euclide pour trouver: |
g = PGCD (2059, 2581) = ? g = f(2059,
2581) = ? |
|
|
Suite des opérations. |
|
|
|
PGCD |
g = 29 |
|
|
En remontant la chaine. |
|
|
Voir Théorème de
Bachet-Bézout – Identité de Bézout
Efficacité
|
1,467 078 079 4 … Constante de
Porter Elle caractérise l'efficacité de l'algorithme
d'Euclide. Notion avancée |
![]()
|
Suite |
|
|
Voir |
|
|
Cette page |
![]()