Algorithme binaire de calcul du PGCD
En informatique, en mathématiques, l'algorithme du PGCD binaire est un algorithme pour calculer le plus grand commun diviseur de deux nombres entiers écrits en binaire (voir Problème 31.1, p. 870-871[1]). L'algorithme a été publié par Josef Stein en 1967[2], bien qu'il semble avoir été connu en Chine dès le Ier siècle[3].
Algorithme
L'algorithme calcule le PGCD de deux nombres entiers naturels et en appliquant itérativement les identités suivantes :
- : tous les entiers naturels divisent zéro et est le plus grand entier naturel qui divise .
- : est un diviseur commun.
- si est impair, n'est pas un diviseur commun.
- si sont impairs et .
Puisque le PGCD est commutatif (), ces identités sont vérifiées en inversant les opérandes : , si b impair, etc.
Ainsi on récapitule dans un tableau les différents cas possibles en supposant à chaque étape que .
| Si ... | alors ... |
|---|---|
| b = 0 | pgcd(a, 0) = a |
| a et b sont pairs | pgcd(a, b) = 2 × pgcd(a/2, b/2) |
| a est impair, b pair | pgcd(a, b) = pgcd(a, b/2) |
| a est pair, b impair | pgcd(a, b) = pgcd(a/2, b) |
| a et b impairs | pgcd(a, b) = pgcd( (a - b), b) |
Exemple
On souhaite calculer le PGCD de et de .
- et sont pairs, ainsi nous sommes le cas 2 : ;
- est impair et est pair, ainsi nous appliquons le cas 3 : ;
- est impair et est pair, ainsi nous appliquons le cas 3 : ;
- et sont impairs , ainsi nous appliquons le cas 4 : ;
- est pair et est impair, ainsi nous appliquons le cas 3 (symétrique) : ;
- est pair et est impair, ainsi nous appliquons le cas 3 (symétrique) : ;
- et sont impairs , ainsi nous appliquons le cas 4 : ;
- Nous avons finalement le cas 1 : .
Ainsi en remontant les étapes nous trouvons :
Complexité
Asymptotiquement, l'algorithme a besoin de étapes où est le nombre de bits dans le plus grand des deux nombres comme toutes les deux étapes réduit au moins l'une des opérandes d'un facteur . Chaque pas fait intervenir peu d'opérations arithmétiques (soustraction et division par deux); lorsque l'on travaille avec des nombres de taille de mots, chaque opération arithmétique se traduit par une seule opération machine, donc le nombre d'opération machine est d'ordre , c'est-à-dire .
Notes et références
- ↑ Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, et Clifford Stein, Introduction à l'algorithmique, 1176 p., Section 31.2
- ↑ J Stein, « Computational problems associated with Racah algebra », Journal of Computational Physics, vol. 1, no 3, , p. 397–405 (ISSN 0021-9991, DOI 10.1016/0021-9991(67)90047-2, lire en ligne, consulté le )
- ↑ Donald E. Knuth, The Art of Computer Programming, vol. II : Seminumerical Algorithms, Addison-Wesley,
Voir aussi
- Portail de l’informatique
- Portail des mathématiques