Seltsame Situation im Primzahl-Prüfcode

8

Als ich ein Problem für Project Euler löste, bat es mich, alle Primzahlen unter 2 Millionen zusammenzufassen. Hier ist mein Code:

%Vor%

Dieser Code führt zur richtigen Antwort, 142913828922. Aber wenn ich die for-Schleife in isPrime() zu:

ändere %Vor%

Es führt zu falschen Ergebnissen wie 142913828920 und 142913828917, etc.

Warum geht es schief? Theoretisch ändert es nicht die Zahl isPrime() sendet an main() , oder?

    
quartercat 24.01.2016, 08:57
quelle

3 Antworten

6

Wenn Sie die Summe von 142913828922 in 142913828920 geändert haben, dann ist der Unterschied 2 , was bedeutet, dass Sie 2 als nicht primieren interpretieren. Das Ändern von sq in sq+1 sollte diesen Unterschied erreichen. Wenn Sie es in sq+2 ändern, wird 3 nicht primiert.

%Vor%

und so weiter.

    
Patrick Roberts 24.01.2016, 09:05
quelle
9

wenn Sie die Schleife zu

ändern %Vor%

Dann wird 2 nicht mehr als Primzahl betrachtet, weil Sie testen, ob 2 % 2 == 0 .

Ähnlich wie bei größeren Zahlen, die Sie hinzufügen, werden mehr und mehr Primzahlen nicht als solche erkannt.

    
Henry 24.01.2016 09:02
quelle
1

Es ist besser,

zu verwenden %Vor%

Anstelle von

%Vor%

um diese Probleme mit der Funktion sqrt

zu vermeiden     
valdem 24.01.2016 09:21
quelle

Tags und Links