2017-09-27 4 views
2

Der folgende Code bestimmt, ob eine Zahl eine Primzahl ist:Warum funktioniert dieser Prime-Checker? richtig

var num = parseInt(prompt("Number:")); 
var ans = "prime"; 

for (var i = 2; i < num; i++) { 
    if (num % i === 0) { 
    ans = "not prime"; 
    break; 
    } 
} 
alert(ans); 

Warum funktioniert dieser Code Arbeit für eine Eingabe von „2“?

Ich dachte, dass eine Eingabe von 2 würde "nicht Prime" geben, wie 2% 2 === 0 wäre wahr.

+0

Möchten Sie eine schreckliche Student sein. Geh und sag deinem Lehrer, dass die doppelte Mersenne-Primzahl '170141183460469231731687303715884105727' fälschlicherweise durch ihren Code nicht als Primzahl kategorisiert wird. – Jamiec

+0

Das würde Spaß machen, aber ich werde das wahrscheinlich nicht tun – Zamt3x

+0

Nein, nicht: D Aber du könntest extra Kredit bekommen, indem du erklärst * warum * das passiert – Jamiec

Antwort

8

Ich dachte, dass eine Eingabe von 2 würde "nicht Prime" geben, wie 2% 2 === 0 wäre wahr.

2 % 2 passiert nie.

Die Schleife, die für Zahlen teilbar ist, überprüft:

for (var i = 2; i < num;... 

i beginnt bei 2 und num ist die Benutzereingabe.

Wenn num ist auch2, dann der erste Test von i < num ist 2 < 2, was falsch ist. Die Schleife wird nie ausgeführt und ans bleibt "prime".

+0

Oh, das macht viel mehr Sinn ... Erlernte etwas Neues! – Zamt3x

1

Die Magie scheint in der Schleife Zustand zu sein:

for (var i = 2; i < num; i++) 

Wenn Sie Eingang 2, die Bedingung i<num nicht erfüllt ist, so dass der Körper wird nicht ausgeführt.

Aber. Wenn Sie 1 als Wert verwenden, wird auch 'prime' zurückgegeben. Oder wenn Sie 0 eingeben. Oder negative Werte. Es könnte besser sein, explizit zu entscheiden, ob die gegebene Zahl prim ist oder nicht, nicht nur, indem man eine bestimmte Menge von Zahlen überprüft - oder zumindest eine Eingabevalidierung durchführt.

Natürlich, wenn die Hauptübung nur etwas Übung mit Schleifen ist, ist sein Code in Ordnung.

HTH jesterchen

+0

Die Eingabevalidierung wurde nicht als Teil dieser Übung betrachtet, aber das wäre auf jeden Fall notwendig – Zamt3x

Verwandte Themen