因此,我试图将中国剩余定理实现到Haskell中有一个问题。到目前为止,我有这样的:中国剩余定理的Haskell实现的问题
minv :: Integer -> Integer -> Integer
minv a m = let (1, x, _) = extGCD a m
in x `mod` m
crt :: [Integer] -> [Integer] -> Integer
crt as ms = let
prod = product ms
big_m = [div prod i| i <- ms]
in (zip as ms (\(ai,mi)) ((ai * big_m * (minv mi big_m)) `mod` prod))
好了,所以我知道minv
功能将工作(我已经测试过多次),但我不能让crt
功能工作。所以这里是我想要做的:
我需要将列表as
和ms
一起下拉列表,然后将每个二进制文件应用于实际找到中国剩余定理的公式。但是我需要首先处理二进制文件,然后将`mod` prod
应用于我从所有二进制文件中获得的整数。
希望这会使某种形式的感觉。
在此先感谢。
作为一个侧面说明,它会从长远来看,使用空格而不是制表符缩进更容易。可以在Haskell中使用制表符,但解释器总是将它们看作8个空格的等价物。我真的推荐使用空格,因为当你的编辑器使它看起来像某些东西缩进了,但编译器不同意时,这有时会导致问题。 – bheklilr 2014-09-24 01:53:14
您遇到的具体问题是什么?它产生了错误的输出还是有错误?我要去猜错误,因为'zip as ms'可能不会被编译,因为'zip'只有2个参数,并且总是返回一个列表,它也没有任何参数。最重要的是,'(\(ai,mi))'不是一个lambda函数,你需要一个' - >'在那里然后是表达式。 –
bheklilr
2014-09-24 02:13:18