2016-05-04 29 views
0

因此,哥德巴赫猜想說每個大於2的正偶數都是兩個素數的總和。我想寫這將給出正偶數Haskell的程序,發現那些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 ] 

但是,這並不總是給我正確的素數。我認爲我的索引已關閉,但我不確定如何/在哪裏?

+2

什麼'primesR'的定義是什麼?舉一個輸入值(和輸出)的例子,這不是你所期望的。請注意,'x + y'將始終等於'n-1'。 – ErikR

+0

@ErikR oops對不起,留下了這個定義。我編輯了這個問題! – user335129

+0

我認爲這只是'y'的定義 - 是不是應該讓'let y = n-x'(IMO要你'x + y = n')? - 對於我來說,對我來說似乎沒問題,例如,'goldbach 16 =(3,13)'(例如,我看到ErikR基本上有同樣的說法 - 但好像OP沒有連接點或者我們都錯了) – Carsten

回答

3

原來的問題是一個小邏輯錯誤:

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

n應該是x+y應該let y=n-x代替