haskell中bezout系数的计算
所以我一直在尝试计算贝佐特系数。我看到的所有解决方案都是同时计算GCD的。我已经有了一个方法 这是我尝试过的代码的不同部分haskell中bezout系数的计算,haskell,Haskell,所以我一直在尝试计算贝佐特系数。我看到的所有解决方案都是同时计算GCD的。我已经有了一个方法 这是我尝试过的代码的不同部分 computeCoeffs :: Int -> Int -> (Int, Int) computeCoeffs :: Int -> Int -> (Int, Int) computeCoeffs a b = let bq = a - r; (q, r) = a `quotRem` b in if b == 0
computeCoeffs :: Int -> Int -> (Int, Int)
computeCoeffs :: Int -> Int -> (Int, Int)
computeCoeffs a b =
let bq = a - r; (q, r) = a `quotRem` b
in if b == 0
then (1, 0)
else ((v, (u - q * v)) = computeCoeffs (a, b))
where a * v + b * (u - q * v) = gcd (a, b)
或者代替最后几行
let (q, r) = a `quotRem` b
let r = a - bq
| b == 0 = (1, 0)
| otherwise (v, (u-qv)) = computeCoeffs (a, b)
where a * v + b(u - q * v) = gcd (a, b)
我尝试过切换let位置、删除或添加保护,但它仍然会抛出错误。类似的方法应该可以工作,需要处理“零除”错误的边缘情况
参考资料:你能给一些错误的提示吗?在作业
(v,(u-qv))=computecoefs(a,b)
中,你希望如何解决这个问题?这个尝试表明了一种理解,通过一些研究可以大大提高。好吧,我需要知道学习什么,从哪里开始,正确的?正如你所猜测的,“研究哈斯克尔”的答案太笼统了。我给了你一个特定文本的名称。学习语言的基础知识。
computeCoeff a b = go a b 1 0 0 1
where go a b s0 s1 t0 t1 | r==0 = (s1,t1)
| otherwise = go b r s1 s t1 t
where (q,r) = quotRem a b
(s,t) = (s0-s1*q, t0-t1*q)
> computeCoeff 240 46
(-9,47)