/ / Primzahlen in c ++ finden [duplizieren] - c ++, Primzahlen

Primzahlen in C ++ finden [duplizieren] - c ++, Primzahlen

Ich lerne gerade C ++ zum ersten Mal und habe eine cpp bool-Funktion geschrieben, um herauszufinden, ob eine ganze Zahl eine Primzahl ist.

Der Code war:

bool isPrime(int n) {
for (int i = 2; i < n; i++) {
if (n % i == 0)
return false;
else
return true;
}
}

Es stellt sich jedoch heraus, dass 9 mit dieser Funktion auch als Primzahl betrachtet wird.

Ich habe eine Lösung gefunden, indem ich einfach die else-Anweisung entfernt habe.

bool isPrime(int n) {
for (int i = 2; i < n; i++) {
if (n % i == 0)
return false;
}
}

aber ich verstehe immer noch nicht, warum die Else-Aussage überhaupt etwas damit zu tun hatte. Kann mir jemand helfen?

Antworten:

1 für die Antwort № 1

Wegen dem if Erklärung.

    if (n % i == 0)
return false;
else
return true;

Die Bedingung lautet "if n ist teilbar durch die aktuelle Zahl ". Die Bedingung wird entweder wahr (in diesem Fall n ist nicht prim) oder falsch (it Macht sei prime), also muss einer der Zweige genommen werden und die Funktion wird in jedem Fall, möglicherweise vorzeitig, beendet.

Entferne den else verhindert eine vorzeitige Rückkehr, verhindert aber auch true wird von der Funktion zurückgegeben. Sie können einfach hinzufügen return true bis zum Ende der Funktion:

bool isPrime(int n) {
for (int i = 2; i < n; i++) {
if (n % i == 0)
return false;
}
return true;    // must be prime
}

1 für die Antwort № 2

Der einzige Weg, eine Zahl ist Primzahl ist, wenn die Schleife abgeschlossen ist, so dass die return true; Anweisung sollte außerhalb der Schleife sein. Sie müssen nur Zahlen bis zur Quadratwurzel von überprüfen n.

Außerdem müssen Sie den Fall behandeln, in dem n ist weniger als 2.

#include <cmath>

bool isPrime(int n)
{
if (n < 2)
{
return false;
}
for (int i = 2; i <= sqrt(n); i++)
{
if (n % i == 0)
{
return false;
}
}
return true;
}

1 für die Antwort № 3

Weil es in der ersten Schleife zurückkehren wird! Wenn die Funktion in den else eintritt, wird true zurückgegeben. Jede ungerade Zahl wird wahr zurückgeben - und 9 ist die erste ungerade Zahl größer als 1, die keine Primzahl ist.

Versuche dies:

bool isPrime(int n) {
for (int i = 2; i < n; i++) {
if (n % i == 0)
return false;
else
continue;
}
return true;
}

0 für die Antwort № 4

9 ist seltsam. Was bedeutet, dass es nicht durch 2 teilbar ist. Tatsächlich ist es die erste ungerade Zahl nach 1, die nicht prim ist. Ihr Code gibt explizit "True" zurück, wenn n nicht durch 2 teilbar ist.

for (int i = 2; i < n; i++) {
if (n % i == 0)
return false;
else
return true;
}

Wenn die for-Schleife das erste Mal ausgeführt wird, i ist 2. Entweder n % i == 0 ist wahr oder es ist falsch. Wenn dies der Fall ist, gibt Ihre Funktion sofort false zurück. Wenn false, gibt Ihre Funktion sofort true zurück.

Sie müssen die verschieben return true Aussage außerhalb der Schleife. Erst nachdem Sie alle möglichen Teiler durch das Ausfüllen der for-Schleife überprüft haben, wissen Sie, ob die Nummer vorhanden ist n ist Prime.