在 Haskell 中实现哥德巴赫猜想
Implement Goldbach's conjecture in Haskell
所以哥德巴赫猜想说每个大于2的正偶数都是两个质数之和。我正在尝试编写一个 Haskell 程序,给定一个正偶数,该程序将找到这 2 个质数:
goldbach n = head [(x,y) | x <- primesR 2 (n-1),
let y = n-x-1, isPrime y]
其中 primesR
在下面给出为(returns 个范围内的素数):
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 ]
但是,这并不能始终给我正确的素数。我认为我的索引已关闭,但我不确定 how/where?
原来问题是一个小逻辑错误:
goldbach n = head [(x,y) | x <- primesR 2 (n-1),
let y = n-x, isPrime y]
因为 n
应该是 x+y
它应该是 let y=n-x
而不是
所以哥德巴赫猜想说每个大于2的正偶数都是两个质数之和。我正在尝试编写一个 Haskell 程序,给定一个正偶数,该程序将找到这 2 个质数:
goldbach n = head [(x,y) | x <- primesR 2 (n-1),
let y = n-x-1, isPrime y]
其中 primesR
在下面给出为(returns 个范围内的素数):
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 ]
但是,这并不能始终给我正确的素数。我认为我的索引已关闭,但我不确定 how/where?
原来问题是一个小逻辑错误:
goldbach n = head [(x,y) | x <- primesR 2 (n-1),
let y = n-x, isPrime y]
因为 n
应该是 x+y
它应该是 let y=n-x
而不是