0% ont trouvé ce document utile (0 vote)
33 vues7 pages

Euclide

Ce document décrit l'algorithme d'Euclide pour calculer le plus grand commun diviseur de deux nombres ou polynômes. L'algorithme fonctionne dans tout anneau euclidien, comme les entiers ou les polynômes à coefficients dans un corps. La complexité de l'algorithme est analysée, en particulier dans le cas des polynômes où elle est montrée comme étant quadratique par rapport au degré.

Transféré par

youssefmasri00
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
33 vues7 pages

Euclide

Ce document décrit l'algorithme d'Euclide pour calculer le plus grand commun diviseur de deux nombres ou polynômes. L'algorithme fonctionne dans tout anneau euclidien, comme les entiers ou les polynômes à coefficients dans un corps. La complexité de l'algorithme est analysée, en particulier dans le cas des polynômes où elle est montrée comme étant quadratique par rapport au degré.

Transféré par

youssefmasri00
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 7

Université de Bordeaux Préparation à l’agrégation

Mathématiques 2021–2022

Algorithme d’Euclide

1. Rappels
Soit A un anneau euclidien. C’est donc que A est commutatif unitaire,
intègre, et qu’il existe une application ϕ : A → N appelée stathme euclidien,
telle que
(1) ϕ(a) = 0 si et seulement si a = 0
(2) Si a et b sont des éléments de A, avec b 6= 0, il existe des éléments
r et q de A tels que a = bq + r et ϕ(r) < ϕ(b). Les éléments r et
q sont respectivement appelés reste et quotient de la division de a
par b ; on n’impose pas qu’ils soient uniques.
Par exemple, si A = Z, on peut prendre ϕ(n) = |n|. Ici, il n’y a pas
unicité de l’écriture a = bq+r, où ϕ(r) < ϕ(b) ; on impose traditionnellement
0 6 r < b ce qui garantit l’unicité, mais c’est un choix arbitraire : on pourait
tout aussi bien imposer −b/2 < r 6 b/2 par exemple. Si A = K[X], où K
est un corps, on peut choisir ϕ(P ) = deg P + 1 si P 6= 0 et ϕ(0) = 0. Enfin,
pour A = Z[i], on peut prendre comme stathme ϕ(a + ib) = a2 + b2 .
Tout anneau euclidien est principal, et tout anneau principal est factoriel
(tout élément non nul se décompose en produit fini d’irréductibles et cette
décomposition est unique, à multiplication des facteurs par des inversibles
près). Si A est un anneau principal, soient a et b deux éléments de A tels
que (a, b) 6= (0, 0), il existe d dans A tel que
(1) d | a et d | b
(2) Si e | a et e | b, alors e | d.
Cet élément d, unique à multiplication près par un élément inversible de
A, est appelé le pgcd de a et b, et noté pgcd(a, b), ou parfois (a, b) si le
contexte ne permet pas d’ambiguïté avec l’élément (a, b) de A2 . On a alors
aA + bA = dA. En particulier, il existe u et v dans A tels que au + bv = d
(identité de Bézout). Ceci donne une définition légèrement plus générale :
on appelle pgcd de (a, b) tout générateur de l’idéal aA + bA de A engendré
par a et b ; cette définition est équivalente à la précédente quand (a, b) 6= 0
et définit pgcd(0, 0) = 0.
Une dernière définition, encore plus générale puisqu’elle est valable si
l’anneau A est factoriel. Si A est factoriel, a ∈ A \ {0}, et p irréductible dans
A, on définit vp (a) la plus grande puissance de p qui divise a : si v = vp (a),
on a pv | a mais pv+1 ∤ a. On définit pgcd(0, b) = b puis, pour tout b ∈ A et
pour a, b tous deux non nuls, on pose
pmin(vp (a),vp (b))
Y
pgcd(a, b) =
p
1
2

où p parcourt un système de représentants des éléments irréductibles de A


modulo les unités. Cette définition généralise les deux précédentes et permet
de calculer le pgcd d quand la factorisation dans A est effective.
Si A est de plus euclidien, l’algorithme d’Euclide permet aussi ce calcul,
en général à bien moindre coût que celui d’une factorisation. L’algorithme
d’Euclide étendu calcule, en même temps que d, des éléments u et v satis-
faisant l’identité de Bézout.
Rappelons finalement que dans un anneau principal A, si a et b sont deux
éléments de A, il existe un élément c dans A, unique à multiplication près
par un inversible de A, tel que
(1) a | c et b | c
(2) Si a | e et b | e, alors c | e.
C’est le ppcm de a et b, noté ppcm(a, b), ou encore [a, b]. On a
aA + bA = (a, b)A, aA ∩ bA = [a, b]A et abA = (a, b)[a, b]A.

2. Algorithme d’Euclide
Algorithme 2.1 (Algorithme d’Euclide)
Entrée : a, b dans A
Sortie : pgcd(a, b)
(1) Si b = 0, retourner a.
(2) Soit r le reste de de la division euclidienne de a par b. Poser a ← b,
b ← r et revenir à l’étape (1).

Preuve. Le cas (a, b) = (0, 0) est clair puisque l’algorithme retourne direc-
tement 0 à l’étape (1). Le cas général vient du fait que (a, b) = (a + bk, b)
pour tout k ∈ A (exercice). L’algorithme se termine car la valeur de ϕ(b)
décroit strictement tant que b 6= 0. Comme ϕ prend ses valeur dans N, on
finit par arriver à ϕ(b) = 0, donc b = 0. 

3. Algorithme d’Euclide étendu


Algorithme 3.1 (Algorithme d’Euclide étendu)
Entrée : a et b dans A, (a, b) 6= (0, 0).
Sortie : Le pgcd d de a et b, et un couple (u, v) de A2 tel que au + bv = d.
(1) Si a = 0, sortir d = b, u = 0, v = 1.
(2) x ← a, y ← b, vx ← 0, vy ← 1, ux ← 1, uy ← 0.
(3) Tant que y 6= 0
(4) Calculer le quotient q et le reste r de la division euclidienne de
x par y.
(5) (ux , uy ) ← (uy , ux − quy ).
(6) (vx , vy ) ← (vy , vx − qvy ).
(7) (x, y) ← (y, r).
(8) Sortir d = x, u = ux , v = vx .
3

Preuve. Comme dans l’algorithme précédent, l’algorithme se termine, et l’on


calcule bien d un pgcd de a et b.
On pose x0 = a, v0 = 0, u0 = 1, x1 = b, v1 = 1 et u1 = 0. Pour i > 1, on
écrit la division euclidienne xi−1 = qi xi + xi+1 , où ϕ(xi+1 ) < ϕ(xi ), et on
pose vi+1 = vi−1 − qi vi et ui+1 = ui−1 − qi ui . C’est donc que
ui vi 0 1 ui−1 vi−1
    
= .
ui+1 vi+1 1 −qi ui vi
Donc si
ui vi a xi−1
    
= ,
ui+1 vi+1 b xi
ce qui est vrai pour i = 1, alors
ui vi a 0 1 xi−1 xi
       
= = .
ui+1 vi+1 b 1 −qi xi xi+1
Soit l l’entier tel que xl+1 = 0. On a bien alors ul a + vl b = xl = d. 

4. Complexité dans K[X]


Soit K un corps. Alors K[X] est un anneau euclidien. On veut majorer le
nombre d’opérations dans K nécessaire à l’exécution des algorithmes d’Eu-
clide en fonction du degré des polynômes concernés. On garde les notations
du paragraphe précédent.

4.1. Algorithme d’Euclide. Soient a et b deux polynômes de K[x], de


degrés respectifs n et m. On suppose que m 6 n. Le nombre d’itérations l
est borné par ϕ(b), donc ici m + 1.
Pour tout i, on note ni = deg xi . On peut diviser le polynôme xi−1 par xi
en utilisant au plus (2ni + 1)(ni−1 − ni + 1) additions et multiplications, et
une inversion dans K. Donc le coût total est inférieur à
l
X
C= (2ni + 1)(ni−1 − ni + 1)
i=1

additions et multiplications, plus l inversions dans K. On voit alors que


l
X
C 6 (2m + 1) (ni−1 − ni + 1) 6 (2m + 1)(l + n − nl ) 6 (2m + 1)(n + m + 1).
i=1
On a donc prouvé le résultat suivant.
Théorème 4.1. Soit N > 1. On peut exécuter l’algorithme d’Euclide pour
deux polynômes de degré inférieur ou égal à N en O(N 2 ) opérations sur le
corps de base.
On peut donner une majoration plus précise de C. Pour cela, on évalue C
dans le cas où le degré décroît exactement de 1 à chaque pas, et on montre
ensuite que c’est le cas le pire.
4

Dans ce cas, l = m + 1, n0 = n, n1 = m et pour i dans {2 . . . , m + 1},


ni = m − i + 1. On trouve alors que
m+1
X 
C = (2m + 1)(n − m + 1) + 2 2(m − i + 1) + 1
i=2
= 2mn + n + m + 1.
Pour montrer que c’est le cas le pire, on pose, pour n0 > n1 > n2 > · · · >
nl > 0,
l
X
σ(n0 , . . . , nl ) = (2ni + 1)(ni−1 − ni + 1).
i=1
Montrons que σ croît, si l’on insère un entier k entre nj−1 et un nj , ou bien
si l’on ajoute k après nl . Soit donc k un entier tel que nj−1 > k > nj .
σ(n0 , . . . , nj−1 , k, nj , . . . , nl ) − σ(n0 , . . . , nl )
= (2k + 1)(nj−1 − k + 1) + (2nj + 1)(k − nj + 1) − (2nj + 1)(nj−1 − nj + 1)
= (2k + 1)(nj−1 − k + 1) + (2nj + 1)(k − nj−1 )
= 2(nj−1 − k)(k − nj ) + 2k + 1 > 0
On montrerait le méme résultat, en ajoutant un entier k après nl . On en
déduit par récurrence que σ(n0 , . . . , nl ) 6 σ(n0 , n1 , n1 − 1, n1 − 2, . . . , 1), et
donc que le cas où le degré baisse de 1 à chaque pas est le cas le pire.
Théorème 4.2. L’algorithme d’Euclide, appliqué à des polynômes a et b de
degrés respectifs n et m (n > m), utilise au plus 2mn + m + n + 1 additions
et multiplications, plus m + 1 inversions dans K.
4.2. Algorithme d’Euclide étendu. Pour évaluer la complexité de l’al-
gorithme d’Euclide étendu, il nous faut majorer le degré des polynômes ui
et vi .
Proposition 4.3. On a
X
deg vi = deg qj = n0 − ni−1 , i ∈ {1, . . . , l + 1} ,
16j<i
X
deg ui = deg qj = n1 − ni−1 , i ∈ {2, . . . , l + 1} .
26j<i

Preuve. Par récurrence. On a v0 = 0, v1 = 1, v2 = v0 − q1 v1 = −q1 . Ainsi,


deg v2 = deg q1 = n − m = n0 − n1 . Soit i > 1. On suppose que pour tout
Pj−1
j ∈ {1, . . . , i}, on a deg vj = k=1 deg qk . Ainsi, deg vj−1 < deg vj . On en
déduit que
X
deg vi+1 = deg(vi−1 − qi vi ) = deg qi + deg vi = deg qi .
16k6i

L’égalité pour le degré de ui se prouve de la même façon. 


5

Le calcul de vi+1 = vi−1 − qi vi demande au plus 2 deg qi deg vi + deg qi +


deg vi +1 opérations dans K pour le produit et au plus deg vi+1 +1 opérations
pour la soustraction, c’est-à-dire en tout 2(ni−1 −ni )(n0 −ni−1 +n0 −ni +1),
sauf pour i = 1 : le calcul de v2 = −q1 demande n − m + 1 changements
de signe. On obtient que le nombre d’opérations dans K pour calculer les vi
est majoré par
l
X
Cv = n − m + 1 + 2 ((ni−1 − ni )(n0 − ni−1 ) + n0 − ni + 1)
i=2
Xl
6 n − m + 1 + 2n (ni−1 − ni ) + 2(l − 1)(n + 1)
i=2
6 n − m + 1 + 2n(n1 − nl ) + 2(l − 1)(n + 1)
6 n − m + 1 + 2mn + 2m(n + 1)
6 4mn + n + m + 1.
On montrerait de même que le nombre d’opérations dans K nécessaires au
calcul des ui est inférieur ou égal à 4m2 + m.
On peut améliorer ces majorations, en calculant le nombre d’opérations
nécessaires au calcul des ui et des vi dans le cas où le degré du reste baisse
de 1 à chaque étape, puis en montrant que c’est le cas le pire. On obtient
alors
m+1
X
Cv = n − m + 1 + 2 ((n − (m − i + 2)) + n − (m − i + 1) + 1))
i=2
= 4mn − 2m2 + n + m + 1
m+1
X
Cu = 2 + 2 ((m − (m − i + 2)) + m − (m − i + 1) + 1)
i=3
= 2(m2 + m).
On peut aussi noter que l’algorithme d’Euclide étendu calcule inutilement
la suite des vi : on peut entièrement supprimer ces calculs, sans affecter le
calcul de u et d. Si b 6= 0, on peut alors poser v = (d − au)/b.
Théorème 4.4. L’algorithme d’Euclide étendu, appliqué à des polynômes
a et b de degrés respectifs n et m (n > m), utilise 6mn + O(n) additions et
multiplications, plus m + 1 inversions dans K.

5. Complexité dans Z
5.1. Algorithme d’Euclide. On applique l’algorithme d’Euclide à deux
entiers a et b positifs. Le nombre d’itérations est inférieur ou égal à b, mais
on peut trouver une bien meilleure majoration :
Théorème 5.1. Soit n un entier naturel non nul, et soient a et b deux
entiers tels que a > b et tels que l’algorithme d’Euclide appliqué à a et
6

b nécessite exactement n divisions, et tels que a soit minimal pour cette


propriété. Alors a = Fn+1 et b = Fn , où (Fn ) est la suite de Fibonacci
définie par F0 = 0, F1 = 1, Fi+2 = Fi+1 + Fi pour i 6 0.
Preuve. Si on applique l’algorithme d’Euclide à Fn+1 et Fn , on obtient
(Fn+1 , Fn ) = (Fn , Fn−1 ) = · · · = (F1 , F0 ) = 1.
On a donc exactement n divisions.
Réciproquement, on suppose que a et b satisfont les conditions de l’énoncé.
Soient xn+1 = a, xn = b, et pour i < n, soit xi le reste de la division de xi+2
par xi+1 , jusqu’à x0 = 0. Alors pour tout i, xi+1 > xi . On note qi la partie
entière de xi+1 /xi . Comme xi+1 = xi−1 + qi xi > xi−1 + xi pour tout i et
comme x0 = F0 = 0 et x1 > F1 = 1, on obtient par récurrence que xi > Fi
pour tout i. Donc a > Fn+1 . La minimalité de a montre alors que a = Fn+1 .
De plus, xn−1 > Fn−1 = Fn+1 − Fn > a − b, puisque Fn 6 b. Comme en
outre xn−1 6 xn+1 − xn = a − b, les inégalités ci-dessus sont des égalités et
Fn = b. 
Le cas le pire est donc atteint pour deux éléments consécutifs de la suite
de Fibonacci. On peut écrire Fn de façon explicite. Soient
√ √
1+ 5 1− 5
ϕ= et ψ =
2 2
2

les racines de x − x − 1, alors Fn 5 = ϕ − ψ n . Ainsi, √
n si l’algorithme
d’Euclide
√ appliqué à a et b demande n − 1 divisions, alors a 5 > ϕn − ψ n .
n
Donc a 5 > ϕ − 1 et √
log(1 + a 5)
n< .
log ϕ
On en déduit que le nombre de divisions est majoré par
l √ m
logϕ (1 + a 5) − 2.
Donc, si a et b sont inférieurs à N , alors le nombre d’opérations élémentaires
dans l’algorithme d’Euclide est en O((log N )3 +1). Mais on peut faire mieux :
Théorème 5.2. Si a et b sont inférieurs à N , le coût du calcul de (a, b) par
l’algorithme d’Euclide est en O((log N )2 + 1).
Preuve. On suppose que a > b > 0, et que l’algorithme d’Euclide pour a et
b demande exactement n divisions. On note x0 = a, x1 = b, x2 , . . . xn+1 = 0
la suite des restes successifs, et pour i dans {1, . . . , n}, on note qi le quotient
de xi−1 par xi . Donc xi−1 = qi xi + xi+1 . Le coût des divisions est inférieur
à une constante multipliée par
n
X n
X
(log xi + 1)(log qi + 1) 6 (log a + 1) (log qi + 1)
i=1 i=1
n
Y
6 (log N + 1)(n + log qi ).
i=1
7

Comme n n
Y Y xi−1 a
qi 6 = 6 N,
i=1 i=1
xi (a, b)
le coût est bien en O((log N )2 + 1). 
5.2. Coût de l’algorithme d’Euclide étendu. On reprend les notations
du §3. Donc x0 = a, v0 = 0, u0 = 1, x1 = b, v1 = 1 et u1 = 0. Pour i > 1,
xi−1 = qi xi + xi+1 , où ϕ(xi+1 ) < ϕ(xi ), et on pose
ui vi 0 1 ui−1 vi−1
    
= .
ui+1 vi+1 1 −qi ui vi
Proposition 5.3. Pour tout i, on a les inégalités |ui | 6 b/xi−1 et |vi | 6
a/xi−1 .
Preuve. On a
ui vi 0 1 0 1
     
= ··· ,
ui+1 vi+1 1 −qi 1 −q1
ainsi
ui vi
 
det = (−1)i
ui+1 vi+1
et
ui vi
−1
vi+1 −vi
  
i
= (−1) .
ui+1 vi+1 −ui+1 ui
Or tous les
0 1 q 1
 −1  
= i
1 −qi 1 0
sont à coefficients positifs, donc leur produit aussi ! Donc
ui vi |vi+1 | |vi |
 −1  
= .
ui+1 vi+1 |ui+1 | |ui |
Or
ui vi a xi
    
= ,
ui+1 vi+1 b xi+1
donc
|vi+1 | |vi | xi a
    
= .
|ui+1 | |ui | xi+1 b
D’où l’on tire les inégalités annoncées. 
Un calcul similaire à celui du paragraphe précédent permet alors de montrer
le résultat suivant.
Théorème 5.4. Si a et b sont inférieurs à N , l’algorithme d’Euclide étendu
appliqué à a et b utilise O((log N )2 + 1) opérations élémentaires.

Vous aimerez peut-être aussi