2016-05-04 8 views
0

So sagt Goldbach's Vermutung, dass jede positive gerade Zahl größer als 2 die Summe von zwei Primzahlen ist. Ich versuche, ein Haskell-Programm zu schreiben, das eine positive gerade ganze Zahl angegeben wird, finden diese 2 Primzahlen:Implementieren Sie Goldbachs Vermutung in Haskell

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

Wo primesR wie unten angegeben wird (gibt Primzahlen in Reichweite):

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 ] 

Dies gibt mir jedoch nicht immer die richtigen Primzahlen. Ich denke, meine Indizierung ist deaktiviert, aber ich bin mir nicht sicher, wie/wo?

+2

sein sollte Was ist die Definition von 'primesR'? Geben Sie ein Beispiel für einen Eingabewert (und die Ausgabe) an, die nicht Ihren Erwartungen entsprechen. Beachten Sie, dass "x + y" immer gleich "n-1" ist. – ErikR

+0

@ErikR oops sorry, dass diese Definition ausgelassen wurde. Ich habe die Frage bearbeitet! – user335129

+0

Ich denke, es ist nur die Definition von 'y' - soll das nicht' let y = n-x' sein (IMO willst du 'x + y = n')? - scheint ok für mich als 'goldbach 16 = (3,13)' zum Beispiel (ja ich sah, dass ErikR im Grunde die gleiche Bemerkung hat - aber es scheint, als OP hat die Punkte nicht verbunden oder wir beide sind falsch) – Carsten

Antwort

3

stellt sich heraus, das Problem ist ein kleines logische Fehler:

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

als n soll x+y sein, es let y=n-x statt

Verwandte Themen