Algorithme D'euclide: Algorithme d'arithmétique calculant le PGCD de deux entiers

En mathématiques, l'algorithme d'Euclide est un algorithme qui calcule le plus grand commun diviseur (PGCD) de deux entiers, c'est-à-dire le plus grand entier qui divise les deux entiers, en laissant un reste nul.

L'algorithme ne requiert pas de connaître la factorisation de ces deux nombres.

Histoire

Algorithme D'euclide: Histoire, Présentation, Implémentation 
Peinture censée représenter le mathématicien Euclide d'Alexandrie, par Justus of Ghent.

Selon Donald Knuth, l'algorithme d'Euclide est l'un des plus anciens algorithmes. Il est décrit dans le livre VII (Proposition 1-3) des Éléments d'Euclide (vers ) sous la forme de l'anthyphérèse. Il est aussi décrit dans le livre X (Proposition 2), mais pour un problème de façon géométrique : comment trouver une « unité de mesure » commune pour deux longueurs de segments. Il procède par soustractions répétées de la longueur du plus court segment sur la longueur du plus long. Cela correspond à une adaptation de la méthode naïve de calcul de la division euclidienne, telle que décrite dans l'article consacré. Pour ce problème géométrique, l'algorithme d'Euclide ne termine pas forcément (dans un langage plus moderne, cela correspond à exécuter l'algorithme d'Euclide pour des nombres réels).

L'algorithme n'a probablement pas été découvert par Euclide, qui aurait compilé des résultats d'autres mathématiciens dans ses Éléments,. Pour le mathématicien et historien B. L. van der Waerden, le livre VII vient d'un livre de théorie des nombres écrit par un mathématicien de l'école de Pythagore. L'algorithme était probablement connu d'Eudoxe de Cnide (vers ),. Il se peut même que l'algorithme ait existé avant Eudoxe,, vu les termes techniques ἀνθυφαίρεσις (anthyphairesis, soustraction réciproque) dans les travaux d'Euclide et aussi d'Aristote.

Quelques siècles plus tard, l'algorithme d'Euclide est inventé de manière indépendante à la fois en Inde et en Chine. L'objectif était de résoudre des équations diophantiennes issues de l'astronomie et de faire des calendriers plus précis. Au Ve siècle, le mathématicien et astronome indien Aryabhata a décrit cet algorithme comme le « pulvérisateur », à cause de son efficacité pour résoudre les équations diophantiennes.

Présentation

Principe

Le PGCD (plus grand commun diviseur) de deux entiers relatifs est égal au PGCD de leurs valeurs absolues : de ce fait, on se restreint dans cette section aux entiers positifs. L'algorithme part du constat suivant : le PGCD de deux nombres n'est pas changé si on remplace le plus grand d'entre eux par leur différence. Autrement dit, pgcd(a, b) = pgcd(ab, b). Par exemple, le PGCD de 252 et 105 vaut 21, mais c'est aussi le PGCD de 252 − 105 = 147 et 105. Ainsi, comme le remplacement de ces nombres diminue strictement le plus grand d'entre eux, on peut continuer le processus, jusqu'à obtenir deux nombres égaux.

Dans l'algorithme, on pourrait réaliser autant de différences que l'on souhaite.[pas clair] Par exemple, le PGCD de 252 et 105 est aussi égal au PGCD de 105 et 252 − 2 × 105 = 42. Ainsi, l'algorithme d'Euclide opère ainsi : on remplace le plus grand des deux nombres par le reste de la division euclidienne du plus grand nombre par le plus petit. Par exemple, la division euclidienne de 252 par 105 donne un reste de 42. Dans Introduction à l'algorithmique de Cormen et al. (voir Th. 31.9), les auteurs appellent théorème de la récursivité pour le PGCD le fait suivant :

pgcd(a, b) = pgcd(b, r)r est le reste de la division euclidienne de a par b.

Ainsi, l'algorithme d'Euclide sur deux nombres entiers positifs a et b avec a > b ⩾ 0 procède comme suit :

  • si b = 0, l'algorithme termine et rend la valeur a ;
  • sinon, l'algorithme calcule le reste r de la division euclidienne de a par b, puis recommence avec a := b et b := r.

Formellement l'algorithme d'Euclide construit une suite finie d'entiers (rn) par récurrence double :

  • r0 = a, r1 = b ;
  • pour n ⩾ 1, rn+1 est le reste de la division euclidienne de rn-1 par rn, en particulier rn+1 < rn.

La suite (rn) est une suite strictement décroissante d'entiers positifs à partir du rang 1 : elle est donc finie et s'arrête au premier n tel que rn = 0.

Exemple

Le tableau suivant montre le calcul du PGCD de 21 et 15. On réalise la division euclidienne de a = 21 et b = 15 : le quotient est 1 et le reste 6. L'algorithme continue avec a := b et b := le précédent reste, jusqu'à trouver un reste nul. L'algorithme s'arrête alors et retourne le dernier reste non nul trouvé, ici Algorithme D'euclide: Histoire, Présentation, Implémentation  qui est bien le PGCD de 21 et 15 :

Étape n Dividende Algorithme D'euclide: Histoire, Présentation, Implémentation  Diviseur Algorithme D'euclide: Histoire, Présentation, Implémentation  Équation Algorithme D'euclide: Histoire, Présentation, Implémentation  Quotient Algorithme D'euclide: Histoire, Présentation, Implémentation  Reste Algorithme D'euclide: Histoire, Présentation, Implémentation 
1 21 15 21 = 15 × 1 + 6 1 6
2 15 6 15 = 6 × 2 + 3 2 3
3 6 3 6 = 3 × 2 + 0 2 0
4 3 0 fin de l'algorithme

Explications géométriques

Dans la tradition grecque, en comprenant un nombre entier comme une longueur et un couple d'entiers comme un rectangle, leur PGCD est la longueur du côté du plus grand carré permettant de carreler entièrement ce rectangle. L'algorithme décompose ce rectangle en carrés, de plus en plus petits, par divisions euclidiennes successives, de la longueur par la largeur, puis de la largeur par le reste, jusqu'à un reste nul.

Considérons par exemple le rectangle de dimensions L = 21 par l = 15 représenté ci-dessous. On peut glisser un carré de côté 15 mais il reste un rectangle de côtés 15 et 6. On peut y glisser deux carrés de côté 6 mais il reste un rectangle de côtés 6 et 3 que l'on peut carreler entièrement de carrés de côté 3. Les carrés de côté 6 ou 15 peuvent aussi se carreler en carrés de côté 3. Le rectangle entier peut se carreler en carrés de côté 3. Il n'existe pas de carré plus grand permettant un tel carrelage.

Algorithme D'euclide: Histoire, Présentation, Implémentation 
Explication géométrique de l'algorithme d'Euclide sur les entiers 21 et 15.

Implémentation

Version itérative

Algorithme D'euclide: Histoire, Présentation, Implémentation 
Algorithme d'Euclide sous la forme d'un organigramme. On pose la question "est-ce que b = 0 ?". Si oui, le pgcd est égal à a. Sinon, on part dans la boucle "Non". On revient à la question avec les nouvelles valeurs de a et b.

Donald Knuth, dans The Art of Computer Programming, écrit une version itérative de l'algorithme d'Euclide :

Algorithme d’Euclide itératif
Entrée = Deux entiers a et b
Sortie = Le PGCD de a et b
fonction euclide(a, b)
    tant que b 0
        t := b;
        b := a modulo b;
        a := t;
    renvoyer a


où l'on note a modulo b le reste de la division euclidienne de a et b.

La version originale de l'algorithme d'Euclide, où l'on n’effectue que des différences successives, est :

Algorithme d’Euclide original
Entrée = Deux entiers a et b
Sortie = Le PGCD de a et b
fonction euclide(a, b)
    tant que a b
        si a > b alors
            a := a b
        sinon
            b := b a
    renvoyer a


Version récursive

Cormen et al., dans Introduction à l'algorithmique en donne une version récursive ; Dasgupta et al. en donne la même version :

Algorithme d’Euclide récursif
Entrée = Deux entiers a et b
Sortie = Le PGCD de a et b
fonction euclide(a, b)
    si b = 0 alors renvoyer a
    sinon renvoyer euclide(b, a modulo b)


L'appel à euclide(a, b) s'arrête et retourne la valeur a si b = 0. Sinon, l'appel continue avec les nombres b et a modulo b. L'exécution du calcul de PGCD de 21 et 15 donne : euclide(21, 15) = euclide(15, 6) = euclide(6, 3) = euclide(3, 0) = 3.

Correction et terminaison

On sait que PGCD(a, 0) = a et que PGCD(a, b) = PGCD(b, a mod b). On progresse dans l'algorithme en diminuant à chaque étape les nombres considérés par calcul du modulo. L'algorithme termine bien : pour une valeur non nulle de b, le calcul de PGCD(a, b) fait appel au calcul de PGCD(a’, b’), où 0 ≤ b’ < |b|, car b’ est le reste d'une division euclidienne par b.

Complexité

Algorithme D'euclide: Histoire, Présentation, Implémentation 
Nombre d'étapes de l'algorithme d'Euclide en fonction des nombres entiers a et b (respectivement en abscisse et en ordonnées). Plus le point de coordonnées (a, b) est foncé, plus le calcul de PGCD(a, b) nécessite d'étapes. Les points (a, b) avec a > b les plus foncés sont concentrés autour de la droite a = bφ, où φ est le nombre d'or.

Dans cette section, nous étudions la complexité temporelle de l'algorithme d'Euclide, c'est-à-dire le nombre d'étapes de calcul en fonction des entiers a et b. La première analyse de complexité connue est due à A. L. Reynaud en 1811 : il écrit que le nombre d'étapes de l'algorithme d'Euclide sur a et b est borné par b,. En 1841, P.-J.-E. Finck démontre que le nombre d'étapes est borné par 2 log2 b + 1. Cela démontre que l'algorithme d'Euclide s'exécute en temps polynomial en la taille de l'entrée (nombre de chiffres pour écrire les nombres a et b). En 1844, Gabriel Lamé raffine les résultats de Finck : il démontre que l'algorithme effectue au plus 5 fois le nombre de chiffres en base 10 du plus petit nombre.

Première analyse

Nous donnons d'abord une analyse qui part du constat suivant :

    Si a ≥ b, alors a mod b < a / 2

Ainsi, si a et b sont codés sur n bits, au bout de deux appels récursifs, leurs tailles contient un bit de moins. Il y a donc O(n) appels récursifs. Comme la division euclidienne s'exécute en O(n2) opérations, l'algorithme d'Euclide est en O(n3).

Analyse via le théorème de Lamé

La précédente analyse permet de montrer rapidement que l'algorithme d'Euclide est en O(log2(b)) divisions. Une analyse plus fine, due pour l'essentiel à Lamé, permet une meilleure évaluation (c'est la constante pour cette évaluation en O(log2(b)) qui peut être améliorée). Elle utilise la suite de Fibonacci définie par

    F0 = 0, F1 = 1, Fk+2 = Fk+1 + Fk, pour tout k ≥ 0,

et dont les premiers termes sont :

Algorithme D'euclide: Histoire, Présentation, Implémentation  Algorithme D'euclide: Histoire, Présentation, Implémentation  Algorithme D'euclide: Histoire, Présentation, Implémentation  Algorithme D'euclide: Histoire, Présentation, Implémentation  Algorithme D'euclide: Histoire, Présentation, Implémentation  Algorithme D'euclide: Histoire, Présentation, Implémentation  Algorithme D'euclide: Histoire, Présentation, Implémentation  Algorithme D'euclide: Histoire, Présentation, Implémentation  Algorithme D'euclide: Histoire, Présentation, Implémentation  Algorithme D'euclide: Histoire, Présentation, Implémentation  Algorithme D'euclide: Histoire, Présentation, Implémentation  Algorithme D'euclide: Histoire, Présentation, Implémentation  Algorithme D'euclide: Histoire, Présentation, Implémentation  Algorithme D'euclide: Histoire, Présentation, Implémentation  Algorithme D'euclide: Histoire, Présentation, Implémentation  Algorithme D'euclide: Histoire, Présentation, Implémentation  Algorithme D'euclide: Histoire, Présentation, Implémentation  ...
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 ...

.

Quand l'algorithme d'Euclide est appelé sur deux nombres de Fibonacci consécutifs Fk+2 et Fk+1 , il utilise k appels récursifs :

    euclide( Fk+2 , Fk+1 ) = euclide( Fk+1 , Fk ) = ... euclide(F2, F1) = euclide(F1, F0)

et comme pour chaque division euclidienne invoquée par l'algorithme le quotient est 1, cette situation est la pire du point de vue de la complexité, plus précisément on a le théorème de Lamé :

Théorème de Lamé — Pour tout entier k ≥ 1, si a > b ≥ 1, et b < Fk+1, alors l'algorithme d'Euclide sur a et b réalise moins de k appels récursifs.

Cette majoration est la meilleure possible, puisqu'elle est atteinte quand Algorithme D'euclide: Histoire, Présentation, Implémentation  et Algorithme D'euclide: Histoire, Présentation, Implémentation  sont deux nombres de Fibonacci consécutifs.

Via la formule de Binet, Fk est équivalent à Algorithme D'euclide: Histoire, Présentation, Implémentation Algorithme D'euclide: Histoire, Présentation, Implémentation  est le nombre d'or. Ainsi, on en déduit à nouveau que le nombre d'appels récursifs est Algorithme D'euclide: Histoire, Présentation, Implémentation . Plus précisément, il y a au plus Algorithme D'euclide: Histoire, Présentation, Implémentation  appels récursifs, où Algorithme D'euclide: Histoire, Présentation, Implémentation désigne le logarithme en base Algorithme D'euclide: Histoire, Présentation, Implémentation . On peut même montrer qu'il y a Algorithme D'euclide: Histoire, Présentation, Implémentation .

Complexité quadratique

Soit n le nombre de bits dans les nombres d'entrées. Comme l'algorithme effectue une division euclidienne à chaque appel récursif, qui coûte O(n2), et qu'il y a O(n) appels récursifs, l'algorithme est en O(n3). Toutefois, une analyse fine montre que l'algorithme s'exécute en temps quadratique en le nombre de bits des nombres d'entrées (voir Problème 31.2 laissé en exercice dans , p. 902).

Généralisation

Anneau euclidien

Cet algorithme repose sur la structure d’anneau euclidien de l’anneau Z des entiers relatifs, plus particulièrement sur la propriété de division euclidienne. Il se généralise donc à d’autres anneaux, en particulier les anneaux de polynômes à coefficients dans un corps. L’algorithme se généralise pour permettre le calcul des coefficients de Bézout.

L’algorithme est effectif à condition de disposer d’un algorithme effectif de division euclidienne. La possibilité de disposer d’un tel algorithme rend de nombreux autres calculs effectifs, notamment, en algèbre linéaire, le calcul de facteurs invariants.

Algorithme étendu aux coefficients de Bézout

Le théorème de Bachet-Bézout assure l'existence de deux entiers u et v tels que : Algorithme D'euclide: Histoire, Présentation, Implémentation . L'algorithme d'Euclide étendu calcule de tels coefficients.

Pour cela, on introduit deux suites Algorithme D'euclide: Histoire, Présentation, Implémentation  et Algorithme D'euclide: Histoire, Présentation, Implémentation  telles que pour tout n, on ait la relation : Algorithme D'euclide: Histoire, Présentation, Implémentation Algorithme D'euclide: Histoire, Présentation, Implémentation est la valeur de Algorithme D'euclide: Histoire, Présentation, Implémentation  à la nème étape de l'algorithme. Les termes Algorithme D'euclide: Histoire, Présentation, Implémentation  constitueront une paire de coefficients de Bézout pour a et b, où N est le numéro de la dernière étape de l'algorithme.

On choisit Algorithme D'euclide: Histoire, Présentation, Implémentation  et Algorithme D'euclide: Histoire, Présentation, Implémentation  (afin que Algorithme D'euclide: Histoire, Présentation, Implémentation  soit vrai pour n = 0 et pour n = 1), puis la relation de récurrence de pas 2 entre les Algorithme D'euclide: Histoire, Présentation, Implémentation  montre :

Algorithme D'euclide: Histoire, Présentation, Implémentation 

On peut ainsi définir Algorithme D'euclide: Histoire, Présentation, Implémentation  par la relation de récurrence de pas 2 : Algorithme D'euclide: Histoire, Présentation, Implémentation  et l'initialisation précédente, et Algorithme D'euclide: Histoire, Présentation, Implémentation  par Algorithme D'euclide: Histoire, Présentation, Implémentation  et l'initialisation précédente ; et on obtient bien la relation annoncée pour tout n.

L'algorithme étendu s'implémente comme l'algorithme classique ; il suffit de rajouter des variables correspondant aux coefficients u et v à calculer, et de faire une multiplication et une soustraction supplémentaires, pour calculer chacun des deux nouveaux coefficients, à chaque étape.

Fractions continues

Les quotients successifs qui apparaissent quand l'algorithme d'Euclide est appliqué aux données a et b, sont précisément les nombres qui apparaissent dans la représentation sous forme de fraction continue de a/b. Considérons l'exemple de a = 1 071 et b = 1 029 utilisé ci-dessus.

Voici le calcul avec les quotients soulignés (successivement 1, 24 et 2) :

    1 071 = 1 029 × 1 + 42
    1 029 = 42 × 24 + 21
    42 = 21 × 2 + 0

De cela on tire :

    Algorithme D'euclide: Histoire, Présentation, Implémentation .

Dans l'égalité précédente, le second membre s'appelle la fraction continue ou continuée du quotient 1 071/1 029.

On peut en déduire les trois approximations suivantes de la fraction, classées par ordre de précision croissante :

  • Algorithme D'euclide: Histoire, Présentation, Implémentation  ;
  • Algorithme D'euclide: Histoire, Présentation, Implémentation  ;
  • Algorithme D'euclide: Histoire, Présentation, Implémentation .

Cette méthode peut également être utilisée pour des nombres réels a et b ; comme dans le cas de deux entiers, la suite de quotients calculés représente la « décomposition en fraction continue » de a/b et fournit une suite d'approximations successives, de qualité croissante, du quotient a/b. Dans le cas où ce quotient est irrationnel, l'algorithme d'Euclide ne termine pas et la suite des approximations obtenues est infinie[réf. nécessaire].

Nota : La décomposition en fraction continue (et la série d'approximations successives correspondante) peut être appliquée, non seulement à un nombre réel quelconque, mais également à une fonction : cette démarche consiste à rechercher les approximants de Padé, dont on peut définir le principe comme suit : Au voisinage d'un point, le développement en série de Taylor d'une fonction donnée fournit un polynôme qui réalise une approximation de la fonction. Mais on peut également chercher une fraction rationnelle qui satisfasse les mêmes conditions que la partie polynomiale du développement de Taylor : l'égalité des dérivées de la fonction et de son approximation, jusqu'à un certain ordre donné[réf. nécessaire].

La comparaison de ces deux types de développements permet de très intéressants développements, comme la démonstration de l'irrationalité de ζ(3)[réf. nécessaire]

Notes et références

(en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Euclidean_algorithm » (voir la liste des auteurs).

Voir aussi

Articles connexes

Lien externe

[vidéo] « Calcul du PGCD avec l'algorithme d'Euclide » sur YouTube, téléversé le

Tags:

Algorithme D'euclide HistoireAlgorithme D'euclide PrésentationAlgorithme D'euclide ImplémentationAlgorithme D'euclide ComplexitéAlgorithme D'euclide GénéralisationAlgorithme D'euclide Notes et référencesAlgorithme D'euclide Voir aussiAlgorithme D'euclideAlgorithmeDécomposition en produit de facteurs premiersEntier relatifMathématiquesPlus grand commun diviseurReste

🔥 Trending searches on Wiki Français:

Louis XVRaphaël VaraneCléopâtre VIIJohn Fitzgerald KennedyTaj MahalPaloma MoritzJean-Jacques RousseauDave GahanAdam SandlerKhabib NurmagomedovMariah CareyMarie LabergeBrendan FraserTableau périodique des élémentsJennifer GreyBasket-ballMike MaignanLe Mont-Saint-MichelCharles de GaulleQualifications à la Coupe d'Afrique des nations de football 2023Brad PittÉdouard PhilippeFrida KahloMichael JordanFlorent PagnyKarim BenzemaCanadaFrançois RuffinThe Good CriminalLisa Marie PresleyChris BrownListe des pays par populationAlgérieHistoire de l'ArménieElvis PresleyRebecca MarderDidier DeschampsDiana SpencerLéa SalaméGmailIndeGroupe B des éliminatoires du Championnat d'Europe de football 2024James BondRonaldinhoMark WahlbergCatastrophe nucléaire de TchernobylMichel CrémadèsFrance d'outre-merRamadanJean-Marc SchiappaFrançaisKarine Le MarchandPeléMaliBixente LizarazuHumza YousafLionJonathan CohenJean-Clair TodiboAlopécieRandal Kolo MuaniManu KonéLe Bourgeois gentilhommeD. B. WoodsideGrades de l'Armée françaiseRoberto Martínez (football)Loi de MooreJennifer SymeDayot UpamecanoJules VerneLeBron JamesGimsGabriel AttalRihannaMatthew BroderickSarah RivensWikipédia🡆 More