查找素数列表

时间:2016-05-04 03:38:21

标签: haskell

我想找到一个素数列表,给定一系列整数 - 计算所述范围内的所有素数:

primesR :: Integral a => a -> a -> [a]
primesR a b | even a = filter isPrime [a+1,a+3..b-1]
            | True   = filter isPrime [a,a+2..b]

通过列表中的奇怪部分过滤出来似乎是直观的,但是我没有得到正确的结果。我怎样才能更改此代码才能正常运行?

1 个答案:

答案 0 :(得分:3)

正确的解决方案是:

primesR :: Integral a => a -> a -> [a]
primesR a b | even a = filter isPrime [a+1,a+3..b]
            | True   = filter isPrime [a,a+2..b]

你错误地拥有even a = filter isPrime [a+1,a+3..b-1]。那是不对的。您需要一直迭代到列表的末尾。