Реализовать гипотезу Гольдбаха в Хаскеле

Таким образом, гипотеза Гольдбаха говорит, что каждое положительное четное число, большее 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 вместо

Другие вопросы по тегам