Sieb des Erathostenes Fehler



  • Bin blutiger c++ anfänger und mir wurde die Aufgabe gestellt, mit Hilfe des Sieb des Erathostenes und einem boolschen Array alle Primzahlen von 2-1000 auszugeben. Allerdings scheine ich irgendwo Fehler zu haben 😕
    Ich wäre sehr erfreut, wenn mir diese jemand aufzeigen bzw. erklären könnte. 🙂
    mfg

    #include <iostream> 
    #include <conio.h> 
    using namespace std; 
    const int MAX=1001;
    
    int main()
    {cout << "Sieb des Erathostenes\n\n"; 
    
    int z,i;
    bool natzahl[MAX]={0}; 
    
      for (i=2;i<MAX;i++) natzahl[i]=true;  
    
      for (z=2;z<MAX;z++)                      
      {
       for (i=z*2;i<MAX;i+=z)                                             
       {
       natzahl [i]=false; 
       }  
      }
    
      for (i=2;i<MAX;i++)                  
      {
        if ( natzahl[i-2] != false)
        {
            cout << " " << natzahl[i-2] ;
    
        }
      }
    cout << "\n";
    
    getch();
    return 0;	
    }
    

  • Mod

    Bei solchen Fragen, wäre es auch nett, wenn du deinen Fehler beschreibst. So in der Art: Was tust du? Was erwartest du? Was passiert stattdessen?

    Bei deiner Ausgabe gibst du derzeit den Markerwert aus natzahl aus, der immer true, also 1, ist. Gib stattdessen den zugehörigen Zahlenwert aus, also i-2 , aus.



  • Wofür steht bei dir die Variable natzahl ? Soll das natürliche Zahl heißen? Aber in nat. Zahlen gibt es sowohl Prinzahlen als auch Nicht-Primzahlen. Ich würde daher vorschlagen, dass du die Variable natzahl in primzahl oder ähnlich umbenennst. Dann weiß man auch sofort, dass true "prim", false "nicht prim" bedeutet.

    Und dann überleg mal, ob du in

    for (z=2;z<MAX;z++)                      
      {
       for (i=z*2;i<MAX;i+=z)                                             
       {
       natzahl [i]=false; 
       }  
      }
    

    nicht noch etwas optimieren kannst. Insbesondere: was gilt für Nicht-Primzahlen, insbesondere die Vielfachen von Nicht-Primzahlen?

    Und ein letzter Kommentar: wozu soll das "-2" in der Ausgabeschleife gut sein, sowohl im if als auch beim cout?


Log in to reply