1
我正在執行Sieve of Sundaram。不包括Sundaram篩號碼
的第一步是獲得整數的,使得列表:
I,J是自然數,1 < = I < = j的
I + J + 2 * I *∫ < = 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]
但我在回答中遇到了非質數問題。排除我的其他工作,我認爲我在生成整數列表時犯了一個錯誤。
請讓我知道我做錯了什麼。
感謝您抓住我的錯誤!然而,當運行'numsToRemove 100',然後執行'(toList。foldr(\(x,y)acc - > insert x $ insert y acc)empty)'時,我得到'[1..33]'作爲結果... – 2014-09-26 01:11:28
你爲什麼認爲這是錯的?它是我期望從你的問題中給出的限制。 – hugomg 2014-09-26 01:29:29
好吧,一旦我得到'[1..33]'的結果,那麼如果我排除所有這些數字肯定是不對的,不是嗎? – 2014-09-26 01:30:55