C quoi, thibaut, cet algo révolutionnaire que tu as découvert et dont tu ne comprends pas le fonctionnement ?
Probablement l'algorithme d'Euclide... Ce n'est pas impossible de le trouver au hasard, en s'amusant un peu.
Mais c'est toi qui l'a trouvé et tu ne sais pas comment il marche ?
Miles Le 04/03/2002 à 19:52 c'est vai que le meilleur et le plus rapide, sans doute, c'est une variante d'Euclide : au lieu de diviser, on prend la différence, c'est pas des divisions -> plus rapide et en itératif à la place de réucrsif, jusqu'à ce qu'un des termes soit nul et on prend l'autre.
C'est ce qu'il y a de plus simple, et j'ai pas encore trouvé mieux.
ça peut être long....
PGCD(1000000000,3)?
Miles Le 04/03/2002 à 20:09 ah non! c'est vrai, il y en a un autre qui utilise l'écriture binaire d'un nombre!!
L'algorithme d'Euclide est très facile à coder en itératif!
unsigned long pgcd(unsigned long a,b) {
unsigned long c;
while(b) {
c=a%b;
a=b;
b=c;
}
return a;
}
(J'espère qu'il n'y a pas d'erreurs là-dedans.)
Miles Le 04/03/2002 à 20:26 oui, mais tu as une division!! alors remplace la divison par une soustraction et ne fait l'échange que si il le faut, et c'est plus rapide!!
Miles Le 04/03/2002 à 20:26 mais comme dit, le binaire est sans doute plus rapide là dedans.
oui, mais d'après mes souvenirs, tu auras un nombre de calculs bien plus importants avec la soustraction, donc p-e que c'est + rapide comme ça...
Miles Le 04/03/2002 à 21:40 facile!! - t'as vraiment jamais vu cet algo, même inconsciemment ? on le donne en général quand on parle de PGCD tout de suite au début -
soit d le résultat de l'algo. Je démontre que d|a et d|b ? je ne pense pas que ce soit utile.
donc d|PGCD(a,b)=c
a=k1*c, b=k2*c
PGCD(a,b)=k*d, donc on a a=k*k1*c et b=k*k2*c. Or on a d'après l'algo toujours une factorisation :
a=b*q+r, donc on peut factoriser par k*d, donc à la fin, on a k=1
Mal expliqué, mais c'est ça. faudrait faire ça correctement sous forme analyse synthèse en explicitant le truc que j'ai pas démontré.
Miles Le 04/03/2002 à 21:50 faut normalement commencer par démontrer ma première assertion - très simple - puis tu vérifies avec la synthèse. Très rapide, très simple - en interro cette année, j'ai dû le faire en moins de 5 min -
Miles Le 05/03/2002 à 08:13 ah, oui, coût de mon deuxième algorithme : O(ln(a*b))
En effet, tous les deux appels, le produit a*b est au moins divisé par 2
Miles : "c'est vai que le meilleur et le plus rapide, sans doute, c'est une variante d'Euclide : au lieu de diviser, on prend la différence, c'est pas des divisions -> plus rapide et en itératif à la place de réucrsif "
C'est valable seulement sur des plateformes qui n'ont pas une instruction de division comme le cher Z80 (sur Gameboy par ex.). Sur un 68'000, je ne pense pas que ce soit plus rapide (à tester).
-- doublleu pauçte --
[edit]Edité par Thibaut le 06-03-2002 à 15:22:38[/edit]

Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 :
www.ti-fr.com.
Quelques idées personnelles
ici.
Miles Le 06/03/2002 à 15:49 je reprendrais l'explication bientôt...
Et pour les corps plus étendus, ça marche aussi, mais avec plutôt ma version que celle des autres...
Miles Le 06/03/2002 à 16:22 sans doute, mais un corps est un anneau, y'a juste euclidien que je ne sais plus...
Dans un corps, quelque soient a, b, c non nuls, c est un pgcd de a et b.
Donc la notion de pgcd n'a d'intérêt que dans un anneau qui n'est pas un corps.
Un anneau euclidien est un anneau A, avec une fonction phi : A\{0} -> N vérifiant :
pour tous x, y<>0, il existe q et r tels que x = q*y + r et ( r=0 ou phi(r)<phi(y) )
(égalité de division euclidienne)
Les anneaux euclidiens sont ceux dans lesquels on peut appliquer l'algorithme d'Euclide pour le pgcd.
Exemple :
Z, avec phi(x)=|x|
R[X], avec phi(p)=deg(p)
Miles Le 06/03/2002 à 17:27 effectivement!! merci de ce rappel évident!!
TiMad Le 06/03/2002 à 18:56 A la limite, l'algo d'euclide peut etre interprétée dans un crop, puisque l'on a une lci ce qui suffit emplement... il faut alors etablir des relations d'ordres...
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!