FONCTION ITÉRATIVE(TRÈS RAPIDE) POUR TROUVER LE PGCD ET LE PPCM [TOUT COMPILATE
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
2 mars 2003 à 22:29
cs_nEUrOne
Messages postés41Date d'inscriptiondimanche 17 novembre 2002StatutMembreDernière intervention14 avril 2004
-
3 mars 2003 à 13:14
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 2 mars 2003 à 23:26
DWORD __stdcall euclid(DWORD x, DWORD y)
{
DWORD t;
if(!x || !y) return 0xFFFFFFFF;
do {
if(x < y) {
t x; x y; y = t;
}
x -= y;
} while(x);
return y;
}
ou en + meticuleux
__declspec (naked) DWORD __stdcall euclid(DWORD x, DWORD y)
{
__asm {
mov ecx, [esp+4] ; x
mov eax, [esp+8] ; y
or ecx, ecx
jz short euclERR
or eax, eax
jz short euclERR
euclNEXT:
cmp ecx, eax
mov edx, eax
jae short noswap
mov eax, ecx
mov ecx, edx
noswap:
sub ecx, eax
jnz short euclNEXT
ret 8
euclERR:
or eax, -1
ret 8
}
}
et d'autres versions a la pelle. Recursion n'est pas a bannir, mais faut toujours regarder si pas moyen de l'enlever.
ciao...
TheBabyCool
Messages postés34Date d'inscriptiondimanche 2 septembre 2001StatutMembreDernière intervention 4 mars 2003 2 mars 2003 à 23:00
???
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 2 mars 2003 à 22:29
Supprime recursivite et vitesse *= 2 au moins.
ciao...
3 mars 2003 à 13:14
2 mars 2003 à 23:36
typedef unsigned _int64 _ui64_;
_ui64_ Pgcd(_ui64_ nbr1, _ui64_ nbr2) // plus grand commun diviseur
{
_ui64_ tmp;
if(!nbr1 || !nbr2) return 0xFFFFFFFFFFFFFFFF; // si erreur
if(nbr1 < nbr2) {tmp nbr1; nbr1 nbr2; nbr2 = tmp;}
for(;;) {
if((tmp nbr1 % nbr2) 0) return nbr2;
nbr1 nbr2; nbr2 tmp;
}
}
ciao...
2 mars 2003 à 23:26
{
DWORD t;
if(!x || !y) return 0xFFFFFFFF;
do {
if(x < y) {
t x; x y; y = t;
}
x -= y;
} while(x);
return y;
}
ou en + meticuleux
__declspec (naked) DWORD __stdcall euclid(DWORD x, DWORD y)
{
__asm {
mov ecx, [esp+4] ; x
mov eax, [esp+8] ; y
or ecx, ecx
jz short euclERR
or eax, eax
jz short euclERR
euclNEXT:
cmp ecx, eax
mov edx, eax
jae short noswap
mov eax, ecx
mov ecx, edx
noswap:
sub ecx, eax
jnz short euclNEXT
ret 8
euclERR:
or eax, -1
ret 8
}
}
et d'autres versions a la pelle. Recursion n'est pas a bannir, mais faut toujours regarder si pas moyen de l'enlever.
ciao...
2 mars 2003 à 23:00
2 mars 2003 à 22:29
ciao...