Aperçu de « Algorithme d`Euclide étendu

publicité
1
2
3
5
= 2
= 3
= 5
= 23
= 120
- 2
- 1
- 1
- 4
- 5
! 1
! 2
! 3
! 5
! 23
http://fr.wikipedia.org/wiki/Algorithme_d'Euclide_étendu
Cependant cette méthode n'est pas la plus efficace. On écrit d'abord ces calculs de façon à faire apparaître un algorithme plus direct :
! 23
= u ! a + v ! b
= 1 ! 120 + 0
r
120
! 23
= 1 ! 120 + -5 ! 23
= 0 ! 120 + 1
= 120 - 5 ! 23
23
5
16/04/12 07:30
Observons que 120 et 23 apparaissent sur les deux premières lignes. D'autre part, la valeur la plus à droite dans chaque ligne (à partir de la 2e ligne du
tableau) est le reste de la ligne précédente, et le dividende est — dans chaque égalité à partir de la 3e ligne — le reste obtenu deux lignes plus haut. Nous
pouvons ainsi calculer progressivement chaque reste successif comme combinaison linéaire des deux valeurs initiales 120 et 23.
0
Reste = Dividende - Quotient ! Diviseur
Dans ce cas, le reste obtenu à l'avant dernière ligne donne le PGCD égal à 1 ; c'est-à-dire que 120 et 23 sont premiers entre eux. Maintenant présentons
autrement les divisions précédentes :
2 ÷ 1 = 2 reste 0
3 ÷ 2 = 1 reste 1
5 ÷ 3 = 1 reste 2
23 ÷ 5 = 4 reste 3
120 ÷ 23 = 5 reste 5
Considérons par exemple le calcul du PGCD de 120 et 23 avec l'algorithme d'Euclide :
Algorithme d'Euclide étendu - Wikipédia
2 sur 7
3
= 5
- 1 ! 2 = (-4!120 + 21!23) - 1 ! (5!120 - 26!23)
- 1 ! 3 = (1!120 - 5!23)
= 23 - 4 ! 5 = 1!23
- 4 ! (1!120 - 5!23)
2
= 3
http://fr.wikipedia.org/wiki/Algorithme_d'Euclide_étendu
= -4 ! 120 + 21 ! 23
= -9 ! 120 + 47 ! 23
- 1 ! (-4!120 + 21!23) = 5 ! 120 + -26 ! 23
1
…
r1 = b
r0 = a
ui-1
…
u1 = 0
u0 = 1
vi
vi-1
…
v1 = 1
v0 = 0
u
ri-1
ui
r
ri
…
…
v
ri-1 - (ri-1÷ri)ri ui-1 - (ri-1÷ri)ui vi-1 - (ri-1÷ri)vi
…
16/04/12 07:30
On présente, sous forme de suite, le calcul du PGCD et des coefficients de Bezout pour deux entiers naturels a et b. Le quotient (entier) de x par y est noté x
÷ y. Pour a=120 et b=23, on vérifiera que le calcul conduit aux trois colonnes r, u et v de l'exemple.
L'algorithme
On a en bleu les calculs successifs qui conduisent au pgcd par reste de la division des deux nombres précédents (algorithme d'Euclide ordinaire). On a noté
en jaune les quotients correspondants. Les deux colonnes vertes donnent les calculs successifs qui aboutissent aux coefficients de Bezout (u et v). On peut
vérifier que ces coefficients se calculent à partir des deux coefficients les précédant dans la même colonne, à l'aide des quotients de la colonne jaune : les
formules sont précisées dans le tableau du paragraphe suivant.
Remarquons que la dernière ligne donne 1 = -9!120 + 47!23, et nous fournit exactement ce que nous voulons : u = -9 et v = 47. Ceci signifie que -9 est
l'inverse pour la multiplication de 120 modulo 23, parce que 1 = -9 ! 120 (mod 23). De même 47 est l'inverse, pour la multiplication modulo 120, de 23.
Algorithme d'Euclide étendu - Wikipédia
3 sur 7
un+1
rn= pgcd(a, b) un = u
0
vn = v
vn+1
pour r' ≠ 0
http://fr.wikipedia.org/wiki/Algorithme_d'Euclide_étendu
calculer à chaque étape deux triplets consécutifs de la suite (deux lignes consécutives du tableau ci-dessus). Par exemple on obtient le pgcd et les deux
coefficients de Bezout par la définition récursive suivante :
eucl(r, u, v, 0, u', v') = (r, u, v)
eucl(r, u, v, r', u', v') = eucl(r', u', v', r - (r÷r')*r', u - (r÷r')*u', v - (r÷r')*v')
On a alors eucl(a, 1, 0, b, 0, 1) = (pgcd(a, b), u, v) avec pgcd(a, b)= a*u + b*v.
De façon à peu près équivalente, on a l'algorithme impératif suivant, qui utilise une boucle while.
Entrée : a, b entiers (naturels)
Sortie : r entier (naturel) et u, v entiers relatifs tels que r = pgcd(a, b) et r = a*u+b*v
Initialisation : r := a, r' := b, u := 1, v := 0, u' := 0, v' := 1
q, rs, us, vs quotient et variables de stockage intermédiaires
les égalités r = a*u+b*v et r' = a*u'+b*v' sont des invariants de boucle.
16/04/12 07:30
La définition par récurrence de la suite (ri, ui, vi) fournit directement un algorithme très simple pour calculer les coefficients de Bezout. L'algorithme, va
Au cours de la démonstration, on n'a jamais eu besoin de supposer le théorème de Bezout, et de fait, celle-ci fournit également une démonstration de ce
théorème pour deux entiers naturels et on le déduit immédiatement pour deux entiers relatifs.
r1 = b, c'est donc bien le pgcd de a et b.
divise ri+1 et ri, il divise ri-1 (voir le tableau) ; comme rn divise bien rn+1 = 0 et rn, on en déduit par récurrence qu'il divise tous les ri, en particulier r0 = a et
(voir le tableau). On en déduit que tout diviseur de a et b divise les ri, combinaisons linéaires de a et b, en particulier rn. Enfin on remarque que si un entier
de Bezout u et v vérifiant pgcd(a, b)= ua + bv. En effet, il est immédiat, par récurrence à partir des deux termes précédents, qu'à chaque étape ri= aui + bvi
justifier cette construction, plus précisément justifier que l'avant dernier terme de la suite, soit (rn, un, vn) fournit bien le pgcd de a et b et deux coefficients
rang, et parce que l'on ne peut diviser par 0. On a posé n+1 le premier indice tel que rn+1=0 qui est donc l'indice maximal d'un élément de la suite. On peut
On obtient donc une suite (ri, ui, vi), récurrente d'ordre 2, nécessairement finie car la suite (rn) est strictement décroissante au plus tard à partir du second
Algorithme d'Euclide étendu - Wikipédia
4 sur 7
http://fr.wikipedia.org/wiki/Algorithme_d'Euclide_étendu
16/04/12 07:30
Ce nombre est d'ailleurs effectivement atteint pour a et b deux nombres consécutifs de la suite de Fibonacci, ou multiples de ceux-ci : la suite de Fibonacci
étant croissante le quotient est bien 1 à chaque étape..
r1 = b " d.fn où le nombre d'itérations de l'algorithme est n+1.
et donc (théorème de Lamé) :
rn + 1 - i " d.fi
second, rn + 1 - 1, est le PGCD de a et b. En notant d = pgcd(a, b), et (fi) la suite de Fibonacci, on obtient donc :
i
), et en remplaçant à chaque étape le quotient par 1, on reconnait la suite de Fibonacci, à la différence que si le premier terme, rn + 1 - 0, est bien 0, le
dès le début. On remarque alors que le quotient est, par construction, toujours supérieur ou égal à 1. En prenant la suite (ri) dans l'ordre inverse, soit (rn + 1 -
Pour évaluer le nombre de pas d'itérations, c'est-à-dire l'entier noté n + 1 ci-dessus, on suppose tout d'abord que a " b, pour que la suite (ri) soit décroissante
L'algorithme d'Euclide étendu a la même structure que l'algorithme d'Euclide : le nombre d'itérations est le même, seul change le nombre d'opérations à
chaque itération.
Complexité de l'algorithme
coefficient à partir du premier.
ui). Cela suffit si on cherche l'inverse de a modulo b (cas où a et b sont premiers entre eux). On peut de toute façon calculer ensuite directement le second
Les calculs de ui et vi dépendent tous deux de celui des ri, mais sont indépendants entre eux. On peut donc simplifier cet algorithme en ne calculant que (ri,
tant que (r' ≠ 0) faire
q := r÷r'
rs := r, us := u, vs := v
r := r', u := u', v := v'
r' := rs -q *r', u' = us - q*u', v' = vs -q*v'
fait
renvoyer (r, u, v)
Algorithme d'Euclide étendu - Wikipédia
5 sur 7
Téléchargement