因此,我試圖將中國剩餘定理實現到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