Je veux faire une fonction combinant deux entiers n et m, renvoie un triple d'entiers (a, b, gcd (n, m)) tel que: am + bn = gcd (n, m) Ne supposez pas que les entiers seront toujours positifs.Implémentation d'un algorithme euclidien étendu
gcd :: Int -> Int -> Int
gcd n m
| n == m = n
| n > m = gcd (n-m) m
| n < m = gcd n (m-n)
combine :: Int ->Int -> (Int,Int,Int)
x1=1; y1=0; x2=0; y2=1
while (m /=0)
( q=div n m ; r=mod n m ; n=m ; m=r
t=x2 ; x2=x1-q*x2 ; x1=t
t=y2 ; y2=y1-q*y2 ; y1=t )
combine n m = (x1,y1,gcd(n,m))
Vous trouverez un lien d'image de capture d'écran. Cliquez sur moi --->! [Link] http://prikachi.com/images.php?images/238/8749238o.png S'il vous plaît si quelqu'un a une solution et avoir une idée de ce que je pourrais remplacer pour créer la fonction, serait très apprécié. Test de la fonction: combiner 3 2 devrait donner ce résultat => (1, -1,1)
Oh, je vois! Je l'ai essayé et il s'est avéré que c'est déjà dedans. Cependant, j'ai corrigé une erreur de votre part, avant où -> combiner n m = (x1, y1, gcdx n m) gcd **. Quoi qu'il en soit, Haskell est une langue inhabituelle et je ne connais pas encore ses bibliothèques. Merci pour la réponse rapide, l'explication et l'aide! P.S [Idk pourquoi j'obtiens -3 taux déjà]: D –
Vous pouvez également utiliser '(q, r) = divMod n m'. – chepner