Encore une source sur le PGCD...
c'est bon on le connait par coeur...
cette source sera supprimee...
Pas trop vite mes amis !
Je propose trois algorithmes :
- le stupide : PGCD(a,b)=PGCD(a-b,b)
- le scolaire : PGCD(a,b)=PGCD(a%b,b)
- le rapide, la nouveaute
cette source a pour but justement de presenter cet
algorithme...
La comparaison a ete faites, le resultat dans la capture d'ecran
Le principe est simple :
l'algorithme est efficace et ne traite que les nombres impairs,
on peut toujours s'y ramenner en calculant toutes les puissances
de deux en commun aux deux nombres...
apres on applique la methode "stupide" qui repose sur le fait que
PGCD(a,b)=PGCD(a-b,b), or puisque a et b sont impairs, a-b est pair,
donc on peut enlever toutes les puissances de 2 a a-b car on sait
qu'elles n'interviendrons pas dans le PGCD de deux nombres impairs,
ceci permet de dimunuer drastiquement le nombre d'operations !
puisque l'on divise a chaque etape au moins un des deux nombres par
deux...
On voit que cet algorithme est efficace sur des grands nombres,
a partir de nombres a 45bits, il devient le plus rapide...
De plus je ne parle pas ici du cout temporel de l'operation % dans
l'algorithme scolaire, il est a cout constant... alors que cet algorithme
n'effectue QUE des comparaisons, des soustractions et des divisions par deux !
ce qui a un cout temporel lineaire si on utilise les librairies de
grands nombres, alors que le % n'est plus a cout constant,
donc cet algorithme est beaucoup, beaucoup mieux !!!!