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.