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?
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
@ErikR oops sorry, dass diese Definition ausgelassen wurde. Ich habe die Frage bearbeitet! – user335129
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