因此,哥德巴赫的猜想说,每个大于2的正偶数都是两个素数的总和。我正在尝试编写一个Haskell程序,给定一个正整数,找到那两个素数:
goldbach n = head [(x,y) | x <- primesR 2 (n-1),
let y = n-x-1, isPrime y]
下面给出primesR
为(返回范围内的素数):
primesR :: Integral a => a -> a -> [a]
primesR a b = takeWhile (<= b) $ dropWhile (< a) $ sieve [2..]
where sieve (n:ns) = n:sieve [ m | m <- ns, m `mod` n /= 0 ]
然而,这并不能始终如一地给我正确的素数。我认为我的索引已关闭,但我不确定如何/在哪里?
答案 0 :(得分:3)
结果证明问题是一个小的逻辑错误:
goldbach n = head [(x,y) | x <- primesR 2 (n-1),
let y = n-x, isPrime y]
因为n
应该是x+y
而应该let y=n-x
而不是