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 . La raison est que division deux du n - les nombres de bits prend le , 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 soit l'ordre des nombres produits par l'algorithme, et laisser soit leurs longueurs. Puis , et le temps de fonctionnement est lié par le