Primzahlen



  • Hallo,

    ich bin dabei einen Programm zu schreiben, das alle Primzahlen zwischen zwei zahlen ausgibt. Aber irgendwas funktioniert nicht so wie geplant und zwar gebe ich 1 bis 10 oder 1 bis 20 funktioniert alles, gebe ich aber zum beispiel 10 bis 20 dann funktioniert nichts mehr. Kann mir jemand helfen?

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    /*
     * 
     */
    int main() {
    
        int ersteZahl, letzteZahl;
      //  int found=0, count=0;
        int i,j;
    
        bool b[1000]; //bool kann true oder false annehmen
    
        cout<<" Geben sie 2 Zahlen ein:";
        cin>>ersteZahl;
        cin>>letzteZahl;
    
        for (i=2; i<letzteZahl; i++)      
       {
            b[i]=true;
        }
    
          cout<<" Primzahlen zwischen " <<ersteZahl<<" und " <<letzteZahl<<" : "<<endl;
    
        for(i=ersteZahl; i<letzteZahl; i++)
        {
            if(b[i])
            {
                cout<<i<<" ";
                for (j=i*2; j<letzteZahl; j+=i)
                {
                    b[j]= false;
                }
            }
        }
    
        return 0;
    }
    


  • Du scheinst das Sieb des Eratosthenes implementieren zu wollen. Dazu musst du natürlich für dein Sieb-Array immer bei 2 anfangen und alle Vielfachen ausschließen. Fang die untere Schleife also bei 2 an. Mach die Ausgabe aber nur, wenn die Zahl größergleich der eingegebenen ist.

    Vielleicht wäre es sauberer, wenn du dir zunächst eine Funktion erstelltest, die nur das Sieb-Array füllt. Und danach einfach von klein-groß drüberloopen.

    Außerdem könnte es nicht schaden zu testen, ob die eingegebenen Zahlen überhaupt im erlaubten Bereich liegen.


Anmelden zum Antworten