Algorithme euclidien

Dans la théorie des nombres , l'algorithme euclidien (également appelé l'algorithme d'Euclid de ) est un algorithme pour déterminer le plus grand diviseur commun (GCD) de de deux éléments de n'importe quel domaine euclidien (par exemple, les nombres entiers de ). Sa signification principale est qu'elle n'exige pas le factorisant les deux nombres entiers, et elle est également significative parce qu'elle est l'un des algorithmes les plus anciens connus, remontant aux Grecs anciens .

Histoire de l'algorithme euclidien

L'algorithme euclidien est l'un des algorithmes les plus anciens connus, puisqu'il est apparu dans éléments '' d'Euclid les '' de autour du 300 AVANT JÉSUS CHRIST . Euclid à l'origine a formulé le problème géométriquement, comme problème de trouver un " commun ; measure" ; pour deux la ligne longueurs, et son algorithme a procédé par la soustraction répétée du plus court du segment plus long. Cependant, l'algorithme n'a pas été probablement découvert par le Euclid et il a pu avoir connu jusqu'à 200 ans plus tôt. Il a été presque certainement connu par le Eudoxus de Cnidus (environ 375 AVANT JÉSUS CHRIST), et le Aristote (environ 330 AVANT JÉSUS CHRIST) a laissé entendre lui dans ses matières , 158b, 29-35 de .

Description de l'algorithme

Deux donnés des nombres normaux un et b , non les deux égale à zéro : vérifier si le b est zéro ; si oui, le un est le gcd. Sinon, répéter le processus using, respectivement, le b , et le reste après division du un par le b . Le reste après division du un par le b est habituellement écrit comme un b de mod de .

Ces algorithmes peuvent être employés dans n'importe quel contexte où la division avec le reste est possible. Ceci inclut des anneaux de des polynômes au-dessus d'un champ aussi bien que l'anneau des nombres entiers gaussiens et en général tous les domaines euclidiens s'appliquant l'algorithme au cas plus général autre que le nombre normal seront discutés en plus détail plus tard dans l'article.

Using la récursion

Using la récursion , l'algorithme peut être exprimé : gcd de la fonction (a, b) si b = 0 de retour a gcd d'autre du retour du (b, un mod de b)

Using l'itération

Une méthode efficace et itérative, pour les compilateurs qui n'optimisent pas la récursion de queue de :

gcd de la fonction (a, b) tandis que ≠ 0 de b t : = b b : = un mod b de a : = t de retour a

L'algorithme euclidien prolongé

voient également :

euclidien prolongé de l'algorithme En maintenant les quotients se produisant pendant l'algorithme, on peut également déterminer le p de nombres entiers et le q avec le   du AP ; +  ;   de Bq de ; =  ; gcd ( un ,   ; b ). Ceci est connu comme algorithme euclidien prolongé.

Algorithme original

L'algorithme original comme décrit par Euclid a traité le problème géométriquement, using la soustraction répétée plutôt que mod (reste).

gcd de la fonction (a, b) tandis que ≠ 0 de b si a > b a : = a - b d'autre b : = b - a de retour a

Noter que tandis que le b peut être zéro, le un ne peut pas être zéro ; autrement, ceci devient une boucle infinie. Cet algorithme n'exige pas un variable supplémentaire t .

Un exemple

Comme exemple, envisager de calculer le gcd de 1071 et de 1029, qui est 21. Rappeler ce &ldquo ; mod&rdquo ; signifie le &ldquo ; le reste après dividing.&rdquo ;

Avec l'algorithme récursif :

Preuve

Supposer que le un et le b sont les nombres normaux dont le gcd doit être déterminé. Maintenant, supposer le   du b ; >  ; 0, et le reste de la division du un par le b est le r . Par conséquent un   de ; =  ; qb  +  ; r où le q est le quotient de la division.

N'importe quel diviseur commun de un et de b est également un diviseur du r . Pour voir pourquoi c'est vrai, considérer que le r peut être écrit comme   du r ; =  ; un   de ; &minus ;   ; qb de . Maintenant, s'il y a un d de diviseur commun de par et de b tels que un   de ; =  ; écart-type de et   du b ; =  ; TD , puis   du r ; =  ; (&minus de s ; d du quart de ). Depuis tous ces nombres, y compris le &minus du s ; le le quart , sont des nombres entiers, il peut être vu que le r est divisible par le d .

L'analyse ci-dessus est vraie pour n'importe quel d de diviseur ; ainsi, le plus grand diviseur commun du un et du b est également le plus grand diviseur commun du b et du r . Par conséquent il est assez si nous continuons de rechercher le plus grand diviseur commun avec le b de nombres et le r . Puisque le r est plus petit en valeur absolue que le b , nous atteindrons le   du r ; =  ; 0 après de façon finie beaucoup d'étapes.

Temps de fonctionnement

En analysant le temps de fonctionnement de l'algorithme d'Euclid, il s'avère que les entrées exigeant les la plupart des divisions sont deux nombres de Fibonacci successifs (parce que leurs rapports sont les convergents dans l'expansion la plus lente de la fraction continue à converger, qui du rapport d'or ) comme prouvé par le Gabriel Lamé , et le pire cas exige divisions du des '' O '' ('' n '') , où le n est le nombre de chiffres dans l'entrée. Cependant, les divisions elles-mêmes ne sont pas des opérations constantes de temps ; la complexité de temps réel de l'algorithme est le O (n^2). La raison est que division deux du n - les nombres de bits prend le O de temps (n (m+1)) , où le m est la longueur du quotient. Considérer le calcul du gcd ( un , b ) où le un et le b ont tout au plus le peu du n , laisser a_0, \ pointille, a_k soit l'ordre des nombres produits par l'algorithme, et laisser n_0, \ pointille, n_k soit leurs longueurs. Puis k=O (n), et le temps de fonctionnement est lié par le O de \ n_i grand (\ sum_ {i

C'est considérablement meilleur que l'algorithme original d'Euclid, dans lequel l'opération de module est effectivement effectuée using la soustraction répétée dans le O (2^n) fait un pas. En conséquence, cette version de l'algorithme a besoin de le temps du O (temps de 2^n n) pour n - nombres de chiffre, ou le O (\ de m \ notation {m}) pour le m de nombre.

L'algorithme d'Euclid est employé couramment dans la pratique, particulièrement pour de petits nombres, en raison de sa simplicité. Un algorithme alternatif, l'algorithme binaire , exploits du GCD que la représentation binaire du a employé par des ordinateurs pour éviter des divisions et pour augmenter de ce fait l'efficacité, bien que ce soit aussi le O (² de n ) ; il rétrécit simplement la constante cachée par la Grande-o notation sur beaucoup de vraies machines.

Il y a des algorithmes plus complexes qui peuvent ramener le temps de fonctionnement au O (n (\ notation n)^2 (\ notation \ notation n)) . Voir la complexité informatique de des opérations mathématiques pour plus de détails.

Relation avec les fractions continues

Les quotients qui apparaissent quand l'algorithme euclidien est appliqué au d'entrées un et au b sont avec précision les nombres se produisant dans la représentation de la fraction continue du un / b . Prendre par exemple à l'exemple du un   de ; =  ; 1071 et   du b ; =  ; 1029 ont employé en haut. Voici le calcul avec des quotients accentués :
1071 = de
× 1029 ; 1 + × de 42
1029 = 42 ; 24 + × de 21
42 = 21 ; 2 + 0

En conséquence, de \ frac {1071} {1029} = \ 1} + de mathbf {\ frac {1} {\ + de mathbf {24} \ frac {1} {\ mathbf {2}}} . Cette méthode s'applique au vrai d'entrées du arbitraire un et au différent de zéro b ; si le un / b est le irrationnel, alors l'algorithme euclidien ne se termine pas, mais l'ordre calculé des quotients représente toujours (maintenant) la représentation infinie de fraction continue du un / b .

Le 1 , 24 , places de quotients de compte du 2 certaines nichées dans un rectangle R ayant la longueur 1071 et la largeur 1029, de la façon suivante :

(1) là est le 1 1029× ; place 1029 dans R dont le déplacement laisse un 42× ; 1029 rectangle, R1 ;

(2) là sont le 24 42× ; 42 places dans R1 dont le déplacement laisse un 21× ; 42 rectangle, R2 ;

(3) là sont le 2 21× ; 21 places dans R2 dont le déplacement ne laisse rien.

Le " ; algorithm" euclidien visuel ; des places nichées s'applique à un rectangle arbitraire R. Si) (de longueur/(largeur) de R est un nombre irrationnel, alors l'algorithme euclidien visuel se prolonge à une fraction continue visuelle.

Généralisation aux domaines euclidiens

L'algorithme euclidien peut être appliqué à quelques anneaux , pas simplement les nombres entiers de . Le contexte le plus général en lequel l'algorithme se termine avec le plus grand diviseur commun est dans un domaine euclidien . Par exemple, les nombres entiers gaussiens et les anneaux polynômes au-dessus d'un champ sont les deux domaines euclidiens.

Comme exemple, considérer l'anneau des polynômes avec des coefficients raisonnables du . En cet anneau, la division avec le reste est effectuée using la longue division , également connue sous le nom de division synthétique . Les polynômes en résultant sont alors faits à monic en factorisant dehors le principal coefficient.

Nous calculons le plus grand diviseur commun de

x^4-4x^3+4x^2-3x+14 = (x^2-5x+7) (x^2+x+2)

et

x^4+8x^3+12x^2+17x+6 = (x^2+7x+3) (x^2+x+2).

Après l'algorithme donne ces valeurs :

Voir également

moindre multiple commun
Algorithme euclidien prolongé
Algorithme binaire du GCD
Algorithme du GCD de Lehmer de

.

Random links:Musée de désert d'Arizona-Sonora | Appel au dépit | Bataille de bâti Tumbledown | Moines de Perl | Algoritmo_euclidiano