-4
我想做一个函数组合,给定两个整数n和m,返回一个整数的三元组: (a,b,gcd(n,m)),使得: am + bn = gcd( n,m) 不应该认为整数总是正数。实现扩展欧几里得算法
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))
您将找到一个屏幕截图图片链接。点击我--->![链接] http://prikachi.com/images.php?images/238/8749238o.png请如果有人有一个解决方案,并有想法我可以取代创造的功能,将不胜感激。 测试的功能:结合3 2应该给这样的结果=>(1,-1,1)
哦,我明白了!我试了一下,结果发现它已经在里面了。但是,我纠正了你的一个错误,在哪里 - >合并n m =(x1,y1,gcdx n m)gcd **。无论如何,Haskell是一种不寻常的语言,我还不知道它的库。感谢您的快速响应,解释和帮助! P.S [Idk为什么我已经得到-3率]:D –
您也可以使用'(q,r)= divMod n m'。 – chepner