sylvanox
Messages postés19Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 mai 2016 9 févr. 2009 à 21:10
Merci ca m'est bien util pour vérifier mes calculs =) +10
cs_Zeroc00l
Messages postés367Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention11 février 2010 8 juil. 2004 à 02:02
Si tu as A et B, deux nombres entiers positifs ou négatifs,
trouver le PGCD de deux nombres revient à trouver le plus grand nombre qui divise à la fois A et B.
Conséquence directe, si on appelle d le PGCD de A et B :
A/d et B/d sont premiers entre eux.
PGCD(A/d , B/d) = 1
Effectivement 3 et 7 sont premier entre eux.
L'algorithme de Bezout permet de trouver deux nombres que l'on appelera U et V qui, pour deux nombres donné A et B, nous permet d'obtenir la relation suivante :
A*U+B*V = PGCD(A, B)
donc
(9).3 * U + (9).7 * V = (9).1 une petite simplification... par 9
L'algo nous donnerait U -2 et V 1
Dans notre cas cet algorithme prendrait en paramètre A et B, ainsi que trois variables (initialisées ou non) pour stocker le résultat de la fonction : les d, U et V de notre exemple.
kimmelf2
Messages postés267Date d'inscriptionlundi 22 septembre 2003StatutMembreDernière intervention27 novembre 2005 29 févr. 2004 à 23:36
au fait, c'est quoi l'algo de bezout ???
ca sert a quoi ?
kimmelf2
Messages postés267Date d'inscriptionlundi 22 septembre 2003StatutMembreDernière intervention27 novembre 2005 28 févr. 2004 à 22:53
dis plutot merci a notre bon vieil Amiga (pour ceux qui s'en souviennent) qui mettai
#define SWAP(a,b) ((a)(a) ^ ((b) (b)^ ((a) = (a) ^ (b))))
souvenirs ....
regrets .... ze vzux mon amiga !!!!!!!!!!!!!!!!!!! ouinnnnnnnnnnnnnnnnnnnn
:-)
cs_Zeroc00l
Messages postés367Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention11 février 2010 26 févr. 2004 à 01:56
Ohhhhhhhhhhhh !
Que c'est jolie !
J'avais oublié les propriétés du XOR qui justement permettent ça ...
En tout cas, là, plus de problème de dépassement possible...
j'ai testé et c'est effectivement plus rapide ...
Merci ! je m'en souviendrai ... :)
-~=[{ ZeroCool }]=~-
P.S : Vive l'algo !
kimmelf2
Messages postés267Date d'inscriptionlundi 22 septembre 2003StatutMembreDernière intervention27 novembre 2005 25 févr. 2004 à 00:02
Plus rapide je crois (en exec)
a=(a xor (b= b xor ( a = a xor b)))
ou si vous preferez :
a = a xor b
b = b xor a
a = a xor b
ou en asm (pour montrer le peu d'instruction processeur necessaires)
xor eax,ebx
xor ebx,eax
xor eax,ebx
le xor est normallement une instruction + rapide qu'une somme ou une difference
ex :
a=3 , b= 7
a a xor b 3 xor 7 = 4
b b xor a 7 xor 4 = 3
a a xor b 4 xor 3 = 7
cs_Zeroc00l
Messages postés367Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention11 février 2010 23 févr. 2004 à 02:04
ok j'explique...
Pour inverser les valeurs que contiennent deux variables il y a la technique bourrin :
Celle que tout le monde connait : On crée une troisième variable temporaire :
Dim a as integer , b as integer
a = 2
b = 3
Dim tmp as integer
tmp = a
a = b
b = tmp
...
Mais pour des valeurs numériques on peut procéder autrement :
a = a + b
b = a - b
a = a - b
exemple a 3 et b 7 :
a a + b 3 + 7 = 10
b a - b 10 - 7 = 3
a a - b 10 - 3 = 7
On comprend vite que les valeurs de départ sont sauvegardés.
Mais le but de l'algo n'est pas de faire a b et b a
mais :
U = V
V = U - V * (A\B)
J'ai donc adapté...
cyberlulu
Messages postés62Date d'inscriptiondimanche 10 novembre 2002StatutMembreDernière intervention26 juin 2008 9 févr. 2004 à 19:08
salut zerocool ! alors d'abord encore merci pour cette source !
et ensuite, j'ai bien essayer de comprendre comment il marche ton programme mais pas moyen de comprendre la fin..... tu mets d'abord u= puis v= et ensuite de nouveau u=.... et là je capte plus rien... si tu pourais juste expliquer ca vite fait, ca serait sympa... :-)
cs_Urgo
Messages postés780Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention16 avril 20091 8 févr. 2004 à 22:16
J'ai justement taffé la dessus en spé maths y'a un mois héhé
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 8 févr. 2004 à 21:56
Je voulais posté à peu pres la meme source (en .net) en meme temps que toi [:)]
Ta source est bien :) pensé et assez simple
9 févr. 2009 à 21:10
8 juil. 2004 à 02:02
trouver le PGCD de deux nombres revient à trouver le plus grand nombre qui divise à la fois A et B.
Exemple : 63 et 27
PGCD (63, 27) [également noté : 63 ^ 27] = 9
63 = 7 * 9
27 = 3 * 9
Conséquence directe, si on appelle d le PGCD de A et B :
A/d et B/d sont premiers entre eux.
PGCD(A/d , B/d) = 1
Effectivement 3 et 7 sont premier entre eux.
L'algorithme de Bezout permet de trouver deux nombres que l'on appelera U et V qui, pour deux nombres donné A et B, nous permet d'obtenir la relation suivante :
A*U+B*V = PGCD(A, B)
donc
(9).3 * U + (9).7 * V = (9).1 une petite simplification... par 9
L'algo nous donnerait U -2 et V 1
Dans notre cas cet algorithme prendrait en paramètre A et B, ainsi que trois variables (initialisées ou non) pour stocker le résultat de la fonction : les d, U et V de notre exemple.
29 févr. 2004 à 23:36
ca sert a quoi ?
28 févr. 2004 à 22:53
#define SWAP(a,b) ((a)(a) ^ ((b) (b)^ ((a) = (a) ^ (b))))
souvenirs ....
regrets .... ze vzux mon amiga !!!!!!!!!!!!!!!!!!! ouinnnnnnnnnnnnnnnnnnnn
:-)
26 févr. 2004 à 01:56
Que c'est jolie !
J'avais oublié les propriétés du XOR qui justement permettent ça ...
En tout cas, là, plus de problème de dépassement possible...
j'ai testé et c'est effectivement plus rapide ...
Merci ! je m'en souviendrai ... :)
-~=[{ ZeroCool }]=~-
P.S : Vive l'algo !
25 févr. 2004 à 00:02
a=(a xor (b= b xor ( a = a xor b)))
ou si vous preferez :
a = a xor b
b = b xor a
a = a xor b
ou en asm (pour montrer le peu d'instruction processeur necessaires)
xor eax,ebx
xor ebx,eax
xor eax,ebx
le xor est normallement une instruction + rapide qu'une somme ou une difference
ex :
a=3 , b= 7
a a xor b 3 xor 7 = 4
b b xor a 7 xor 4 = 3
a a xor b 4 xor 3 = 7
23 févr. 2004 à 02:04
Pour inverser les valeurs que contiennent deux variables il y a la technique bourrin :
Celle que tout le monde connait : On crée une troisième variable temporaire :
Dim a as integer , b as integer
a = 2
b = 3
Dim tmp as integer
tmp = a
a = b
b = tmp
...
Mais pour des valeurs numériques on peut procéder autrement :
a = a + b
b = a - b
a = a - b
exemple a 3 et b 7 :
a a + b 3 + 7 = 10
b a - b 10 - 7 = 3
a a - b 10 - 3 = 7
On comprend vite que les valeurs de départ sont sauvegardés.
Mais le but de l'algo n'est pas de faire a b et b a
mais :
U = V
V = U - V * (A\B)
J'ai donc adapté...
9 févr. 2004 à 19:08
et ensuite, j'ai bien essayer de comprendre comment il marche ton programme mais pas moyen de comprendre la fin..... tu mets d'abord u= puis v= et ensuite de nouveau u=.... et là je capte plus rien... si tu pourais juste expliquer ca vite fait, ca serait sympa... :-)
8 févr. 2004 à 22:16
8 févr. 2004 à 21:56
Ta source est bien :) pensé et assez simple