首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell中国剩余定理

Haskell中国剩余定理
EN

Stack Overflow用户
提问于 2017-09-17 03:01:13
回答 1查看 1.6K关注 0票数 0

我理解,为了使这个函数工作,crtHasSolution必须是真的,首先,我很难证明n可以是一个解决方案--在haskell中如何编写或检查它的任何想法或技巧?

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

代码语言:javascript
复制
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 =

代码

EN

回答 1

Stack Overflow用户

发布于 2017-09-17 03:49:45

来自维基百科

很容易检查x的值是否是一个解决方案:按每个x计算x的欧几里德除法的剩余部分就足够了。

如果x `mod` m_i /= a_i用于任何i,那么x不是解决方案。

这有点家庭作业的味道,所以我将给您一些关于crtIsSolution n as ms实现的主要问题,而不是给您一个计算这个问题的一行。

  • 如果nas是空的,那么ms是一个解决方案吗?
  • 如果您可以计算n `mod` m_0 == a_0n是否是ms_0as_0的解决方案,那么n是否是m_0:ms_0a_0:as_0的解决方案?
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46260241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档