【问题标题】:Excluding Numbers for Sieve of Sundaram不包括 Sundaram 筛子的数字
【发布时间】:2014-09-26 00:58:07
【问题描述】:

我正在努力实现Sieve of Sundaram

第一步是得到一个整数列表:

i,j 是自然数,1

i + j + 2*i*j

这是我的功能。它应该生成与上述匹配的所有(i, j) 的元组列表 限制。

numsToRemove :: Integer -> [(Integer, Integer)]
numsToRemove n = [ (i, j) | i <- [1..n], j <- [1..n], i <= j, i >= 1, j >= 1, 
                            i * j + 2*i*j <= n]

但我的回答中没有质数。排除我的其他工作,我认为我在生成这个整数列表时犯了一个错误。

请让我知道我做错了什么。

【问题讨论】:

    标签: haskell sieve


    【解决方案1】:

    您的函数检查i * j + 2*i*j &lt;= n,但您的定义要求i + j + 2*i*j &lt;= n。有一个 * 应该是 +

    【讨论】:

    • 感谢您发现我的错误!但是,当运行numsToRemove 100,然后运行(toList . foldr (\(x,y) acc -&gt; insert x $ insert y acc) empty) 时,我得到[1..33] 结果...
    • 你为什么认为那是错误的?这是我对您在问题中给出的限制的期望。
    • 好吧,一旦我得到[1..33] 作为结果,那么如果我排除所有这些数字肯定是不对的,不是吗?
    • @KevinMeredith,筛子删除了计算i + j + 2ij结果,而不是生成它们的is 和js。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 2017-04-27
    • 2017-08-26
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    相关资源
    最近更新 更多