我想找到一个素数列表,给定一系列整数 - 计算所述范围内的所有素数:
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]
通过列表中的奇怪部分过滤出来似乎是直观的,但是我没有得到正确的结果。我怎样才能更改此代码才能正常运行?
答案 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]
。那是不对的。您需要一直迭代到列表的末尾。