Prifaktorzerlegung funktioniert nur teilweise (C++)



  • Squishy schrieb:

    Meine Idee war, dass eine Zahl Primzahl ist, wenn sie nicht durch 2,3 und 5 teilbar ist. Oder sollte ich die 7 noch hinzunehmen?

    EPIC FAIL 😃 😃 😃



  • Geh wieder HTML proggen, husch!



  • HTML ist keine Programmiersprache 😡 👎 🙄 ⚠



  • Squishy schrieb:

    Logisch gesehen oder wegen der Implementierung?

    Meine Idee war, dass eine Zahl Primzahl ist, wenn sie nicht durch 2,3 und 5 teilbar ist. Oder sollte ich die 7 noch hinzunehmen?

    Bei der Probedivision musst du auf Teilbarkeit durch alle Primzahlen zwischen 2 und sqrt(n) testen.



  • Z schrieb:

    Squishy schrieb:

    Logisch gesehen oder wegen der Implementierung?

    Meine Idee war, dass eine Zahl Primzahl ist, wenn sie nicht durch 2,3 und 5 teilbar ist. Oder sollte ich die 7 noch hinzunehmen?

    Bei der Probedivision musst du auf Teilbarkeit durch alle Primzahlen zwischen 2 und sqrt(n) testen.

    Dont feed the troll! ⚠ 😡



  • lol? Wie kommst Du denn auf sowas?

    Naja...
    Durch 1 ist alles teilbar,
    Durch 2 ist teilbar, was auch durch 4 und 8 teilbar ist (also muss ich das nicht prüfen),
    Durch 3 ist teilbar, was auch durch 6 und 9 teilbar ist (also muss ich das nicht prüfen)
    Durch 5 ist teilbar, was auch durch 10 teilbar ist (also muss ich 10 nicht prüfen)
    Durch 7 ist manches teilbar (deshalb hab ichs dann noch mit rein genommen)

    Und da, wo das nicht auf geht, das sind Primzahlen ^^

    (Also das ist das, was ich mir dabei dachte, und was bei den Primzahlen, wo ichs nachgerechnet hab, funktioniert hat xD)



  • Probier mal

    99971



  • Squishy schrieb:

    [
    Naja...
    Durch 1 ist alles teilbar,
    Durch 2 ist teilbar, was auch durch 4 und 8 teilbar ist (also muss ich das nicht prüfen),
    Durch 3 ist teilbar, was auch durch 6 und 9 teilbar ist (also muss ich das nicht prüfen)
    Durch 5 ist teilbar, was auch durch 10 teilbar ist (also muss ich 10 nicht prüfen)
    Durch 7 ist manches teilbar (deshalb hab ichs dann noch mit rein genommen)

    Und da, wo das nicht auf geht, das sind Primzahlen ^^

    Quadrate von größeren Primzahlen erfasst Du damit nicht. Z.B. 11*11.



  • otze schrieb:

    Probier mal

    99971

    Primzahl ^^

    lolalter schrieb:

    Quadrate von größeren Primzahlen erfasst Du damit nicht. Z.B. 11*11.

    121 zerlegen hat geklappt...

    Das hier ist der letztendliche Quelltext, kompiliert und versucht es.

    #include <cstdio>
    #include <iostream>
    #include <cmath>
    
    bool Ist_Prim(int i){
    if (i==2) return true;
    if (i==3) return true;
    if (i==5) return true;
    if (i==7) return true;
    if (i%2==0) return false;
       else{if(i%3==0) return false;
        else{if(i%5==0) return false;
         else{if(i%7==0) return false;
    }}}
    return true;
    }
    
    int Zerlegung(int Zahl){
    int Rech = Zahl;
    int i;
    while (Rech > 1)
      {i = 2;
       if (Rech % i == 0)
         {Rech = Rech / i;}
          else {for (i=3;Rech;i++)
                 {if (Ist_Prim(i))
                     {if (Rech % i == 0)
                         {Rech = Rech / i;
                          break;}
                     }
                  }
                }
         std::cout<<" * "<<i; }
    
    return 0;
    }
    
    int Eingabe(){
    int Zahl;
    while(!(std::cin >> Zahl))
    {std::cin.clear();
     std::cin.ignore(1000, '\n');
     std::cout<<"Falsche Eingabe, bitte wiederholen!";
     }
    return Zahl;
    }
    
    int main(){
    int Zahl;
    
    std::cout<<"Primfaktorzerlegung"<<std::endl;
    std::cout<<"Welche Zahl soll in ihre Primfaktoren zerlegt werden?:";
    //do{
    //std::cin>>Zahl;
    //}while Eingabe(Zahl);
    Zahl = Eingabe();
    std::cout<<std::endl;
    std::cout<<Zahl<<" = ";
    Zerlegung(Zahl);
    
    std::cout<<std::endl;
    return 0;}
    

    Ich lass mich ja gern belehren, aber bisher hat alles geklappt was ich damit versucht habe...

    EDIT: Aber denkt euch bitte das erste blöde Malzeichen weg. Da hab ich mich gar nicht mehr drum gekümmert.



  • Squishy schrieb:

    lolalter schrieb:

    Quadrate von größeren Primzahlen erfasst Du damit nicht. Z.B. 11*11.

    121 zerlegen hat geklappt...

    Deine Ist_Prim-Funktion gibt für 121 true zurück.

    Die Funktion ist falsch. Wie kann man nur so stur bleiben obwohl Dir mehrfach gesagt wurde, dass Deine Idee Unsinn ist?



  • Squishy schrieb:

    Ich lass mich ja gern belehren, aber bisher hat alles geklappt was ich damit versucht habe...

    Dein Programm würde auch funktionieren, wenn du deinen kaputten Primzahltest komplett weglassen würdest, und einfach für jedes i die Teilbarkeit prüfst. Darum geht es nicht.

    Es geht darum, dass dein Programm unnötigerweise die Teilbarkeit durch Zahlen prüft, die keine Primzahlen sind, angefangen mit 121. Das ist die erste Zahl, die deine Ist_Prim-Funktion fälschlicherweise für eine Primzahl hält. Die Prüfung ist aber unnötig, weil eine Zahl, die durch 121 teilbar wäre, auch durch 11 teilbar wäre, was du schon vorher geprüft hast.


Anmelden zum Antworten