Programm um Primzahlen zu erkennen



  • Hallo, Ich bin neu hier und bereite mich gerade ein wenig auf mein nächstes Unisemester vor. Dafür hätte ich ein Programm geschrieben, welches Primzahlen erkennen soll. An sich macht das Programm auch was es soll, jedoch habe ich ein Problem. Mein Programm testet alle Zahlen durch, bis i==2 bzw. bis es erkennt, dass es keine Primzahl ist. Bis dahin gibt es in Schleife aus "Die Zahl ist keine Primzahl". Ich habe jetzt auch schon viel überlegt, wie ich dies ändern könnte komme jedoch leider zu keiner Lösung. Eventuell könnte mir hier jemand helfen.

    Danke schon mal im Voraus:

    Hier der Code:

    #include <iostream>
    using namespace std;

    int prim (int a) {
    if (a==2)
    cout << "Diese Zahl ist eine Primzahl! \n";

    for (int i=a-1; i>1; i--) {
    	int rest;
    	rest = a%i;
    	
    		if (rest==0) {
    			cout << " Diese Zahl ist keine Primzahl! Der größte gemeinsame Teiler ist " <<i<< " !\n";
    			break;
    		}
    		
    		else  {
    		cout << " Diese Zahl ist eine Primzahl! \n";
    		}		
    	}
    return 0;
    }
    

    int main(){

    cout<<"Geben Sie eine Zahl an: ";
    int a;
    cin>> a;
    
    prim(a);
    
    return 0;
    

    }



  • Dieser Beitrag wurde gelöscht!


  • void prim (int a) {
      if (a==2){
        cout << "Diese Zahl ist eine Primzahl! \n";
        return;
      }
    
      for (int i=a-1; i>1; i--) {
    	int rest;
    	rest = a%i;
    	
            if (rest==0) {
    	   cout << " Diese Zahl ist keine Primzahl! Der größte gemeinsame Teiler ist " <<i<< " !\n";
    	   return;
    	}
      }		
      cout << " Diese Zahl ist eine Primzahl! \n";
    }
    


  • @Belli Danke für die Antwort aber dann gibt es ja bei egal welcher Zahl aus, dass es eine Primzahl ist, selbst wenn es keine ist. Es gibt also (zumindest bei mir) dann zusätzlich das "Diese Zahl ist eine Primzahl aus.



  • Ich habe es nicht getestet, allerdings wird die Funktion ja nach jeder Ausgabe unmittelbar verlassen.
    Die Funktion kann also maximal eine Ausgabe produzieren.

    Edit:
    Nun habe ich es auch getestet:

    Geben Sie eine Zahl an: 17
    Diese Zahl ist eine Primzahl!

    D:>um
    Geben Sie eine Zahl an: 15
    Diese Zahl ist keine Primzahl! Der gr÷▀te gemeinsame Teiler ist 5 !



  • Abgesehen vom Code: wieso eigentlich der "größte gemeinsame Teiler"? Da ist doch nichts gemeinsam, vom ggT spricht man bei 2 Zahlen. Eine einzelne Zahl hat höchstens einen größten Teiler (der ist aber gleich der Zahl selbst).

    Außerdem ist es nicht effizient, von den größten Zahlen ausgehend zu testen. Stattdessen fange mit der 2 an und teste dann nur alle ungeraden Zahlen, also 3, 5, 7, ... bis zur Wurzel der zu testenden Zahl. Die größte Zahl, die deine Zahl teilt, aber nicht deine Zahl selbst ist, ist dann deine Zahl geteilt durch den kleinsten gefunden Teiler (der nicht 1 ist).



  • @wob Achja stimmt. Den Zusatz habe ich spontan dazu gemacht habe nicht wirklich auf die Bezeichnung geachtet tbh. Danke für den Hinweis.

    Habe es nach einer Aufgabenstellung von der Uni gemacht. Da stand dass wir es zuerst so programmieren sollen. Dein Lösungsweg stand dann bei den erweiterten Schritten soweit bin ich noch nicht gekommen 🙂



  • @Belli Ah okay jetzt habe ich es geschafft habe unabsichtlich nicht alles übertragen. Danke für die Hilfe 🙂



  • @nicii_20_07 sagte in Programm um Primzahlen zu erkennen:

    @Belli Ah okay jetzt habe ich es geschafft habe unabsichtlich nicht alles übertragen. Danke für die Hilfe 🙂

    Du hättest die ganze Funktion vollständig kopieren und in Deinem Programm damit entweder die alte überschreiben können, oder sie unter anderem Namen zusätzlich hineinkopieren können (und dann natürlich mittels anderem Namen aufrufen) ....


Anmelden zum Antworten