在Haskell中实现Goldbach的猜想

时间:2016-05-04 03:31:02

标签: haskell primes goldbach-conjecture

因此,哥德巴赫的猜想说,每个大于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 ]

然而,这并不能始终如一地给我正确的素数。我认为我的索引已关闭,但我不确定如何/在哪里?

1 个答案:

答案 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而不是