不包括Sundaram Sieve的数字

时间:2014-09-26 00:58:07

标签: haskell sieve

我正致力于实施Sieve of Sundaram

第一步是获取整数列表,以便:

  

i,j是自然数,1 <= i <= j

     

i + j + 2 * i * j&lt; = n

这是我的功能。它应该生成一个符合上述条件的所有(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]

但我在答案中得到了非素数。除了我的其他工作,我认为我在生成这个整数列表时犯了一个错误。

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

1 个答案:

答案 0 :(得分:2)

您的功能会检查i * j + 2*i*j <= n,但您的定义会询问i + j + 2*i*j <= n。有一个*应该是+