我明白为了让这个功能正常工作crtHasSolution首先必须是真的我无法证明n可以解决任何关于如何在haskell中编写或检查的想法或提示?
我知道N的条件是它必须大于或等于0且小于m,这是所有mod基础的乘积。
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 =
答案 0 :(得分:4)
来自wikipedia:
很容易检查
x
的值是否为解决方案:每个 [x
] <计算m_i
的欧几里德除法的余数就足够了/强>
如果x `mod` m_i /= a_i
为i
,则x
不是解决方案。
这有点功课,所以不是给你一个计算这个的单行,我会给你一些关于crtIsSolution n as ms
实施的一些重要问题:
n
和ms
为空,as
是解决方案吗?n `mod` m_0 == a_0
以及n
是否为ms_0
和as_0
的解决方案,您是否可以计算n
是m_0:ms_0
的解决方案{1}}和a_0:as_0
?