0

所以哥德巴赫猜想说,每一个大于 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 ]

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

4

1 回答 1

3

原来问题是一个小的逻辑错误:

goldbach n = head [(x,y) | x <- primesR 2 (n-1),
                           let y = n-x, isPrime y]

n应该是它x+y应该let y=n-x

于 2016-05-04T04:32:16.307 回答