Haskell中国剩余定理

时间:2017-09-17 03:01:13

标签: haskell chinese-remainder-theorem

我明白为了让这个功能正常工作crtHasSolution首先必须是真的我无法证明n可以解决任何关于如何在haskell中编写或检查的想法或提示?

我知道N的条件是它必须大于或等于0且小于m,这是所有mod基础的乘积。

notes from where conclusion came from

crtHasSolution :: [Integer] -> [Integer] -> Bool
crtHasSolution as ms = length as > 0 &&
                       length ms > 0 &&
                       length as == length ms &&
                       all (>=0) as &&
                       all (>=2) ms &&
                       pairwise_coprime ms

-- Is a given number a solution to a CRT problem?
-- usage: crtIsSolution n as ms = ans
-- assures: ans == True, if crtHasSolution as ms == True and n is a solution
--          ans == False, otherwise

crtIsSolution :: Integer -> [Integer] -> [Integer] -> Bool
crtIsSolution n as ms = crtHasSolution as ms &&
                        n >= 0 &&
                        n < m
                        where m =

code

1 个答案:

答案 0 :(得分:4)

来自wikipedia

  

很容易检查x的值是否为解决方案:每个 [x] <计算m_i的欧几里德除法的余数就足够了/强>

如果x `mod` m_i /= a_ii,则x不是解决方案。

这有点功课,所以不是给你一个计算这个的单行,我会给你一些关于crtIsSolution n as ms实施的一些重要问题:

  • 如果nms为空,as是解决方案吗?
  • 如果您可以计算n `mod` m_0 == a_0以及n是否为ms_0as_0的解决方案,您是否可以计算nm_0:ms_0的解决方案{1}}和a_0:as_0