2016-06-28 34 views
-5

Schreiben Sie einen C++ Algorithmus, um nach einer Primzahl zu suchen. Meine C++ Codes sind wie folgtFinden der Primzahl einer Ganzzahl mit C++

#include<iostream> 
#include<cmath> 

using namespace std; 

int x,n; 
bool isprime(int); 

int main() 
{ 
    cout<<"Enter prime no"<<endl; 
    cin>>x; 
    for (n=2;n<=floor(sqrt(x));n++) 
    { 
     if (x==1) 
      cout<<"not prime"<<endl; 
     else if (x%n==0) 
      cout<<"is not prime"<<endl; 
     else 
      cout<<"prime"<<endl; 
    } 
} 

Aber wenn ich die programn betreiben meine Ausgabe zum Beispiel scheint nicht richtig i halte, „ist eine Primzahl“, wenn die Antwort eindeutig ist prime.The nicht

else if (x%n==0) 
cout<<"is not prime"<<endl; 

Teil der Anweisung könnte nicht ordnungsgemäß ausgeführt werden. Könnte mir jemand erklären, was mit meinem Code falsch ist. Danke

+1

Wenn Sie noch keinen Debugger verwendet haben, ist jetzt die richtige Zeit, um zu lernen, wie. Mit einem Debugger können Sie den Code zeilenweise durchlaufen, während Sie die Variablen und ihre Werte beobachten und sehen, wie sich die Variablen ändern. Wenn Sie dies tun, sollten Sie Ihr Problem hoffentlich schnell finden. –

+0

Sie treffen Ihre Entscheidung während der ersten Iteration der For-Schleife. Um herauszufinden, ob eine ganze Zahl prim ist, müssen Sie die gesamte Schleife ausführen. Sie müssen Ihre Formatierung wirklich korrigieren, um einen besseren visuellen Code-Flow zu erhalten. – IInspectable

+0

Nimm 'x = 9' .'x' ist nicht durch' n = 2 teilbar.So gibst du als Primzahl aus.Obwohl du bis jetzt noch nicht nach 'n = 3' gecheckt hast. Was ist hier falsch? Tipp: Vielleicht möchten Sie nach allen Teilern suchen und dann entscheiden, ob es prim ist oder nicht. –

Antwort

2

Ihre Schleife Ausgänge "prime" für jeden Nicht-Divisor von x. Sie sollten die Schleife nach dem ersten Treffer "not prime" beenden und nur "prime" ausgeben, wenn die Schleife nicht beendet wurde.

1

Wie von Udo Klein vorgeschlagen, sollten Sie aus der Schleife ausbrechen, wenn festgestellt wurde, dass die Nummer keine Primzahl ist. Außerdem muss nicht überprüft werden, ob x gleich Eins innerhalb der Schleife ist.

#include<iostream> 
#include<cmath> 

int main() 
{ 
    int x; 
    std::cout << "Enter prime no" << std::endl; 
    std::cin >> x; 

    if (x == 1) 
    { 
     std::cout << "not prime" << std::endl; 
     return 1; 
    } 

    for (int n = 2; n <= floor(sqrt(x)); n++) 
    { 
     if (x % n == 0) 
     { 
      std::cout << "is not prime" << std::endl; 
      return 1; 
     } 
    } 
    std::cout << "prime" << std::endl; 
    return 0; 
} 
Verwandte Themen