Реализовать гипотезу Гольдбаха в Хаскеле
Таким образом, гипотеза Гольдбаха говорит, что каждое положительное четное число, большее 2, является суммой двух простых чисел. Я пытаюсь написать программу на Haskell, которая, учитывая положительное четное целое число, найдет эти 2 простых числа:
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 ответ
Решение
Оказывается, проблема в небольшой логической ошибке:
goldbach n = head [(x,y) | x <- primesR 2 (n-1),
let y = n-x, isPrime y]
как n
должен быть x+y
так должно быть let y=n-x
вместо