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; }
-
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, alsoi-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 Variablenatzahl
inprimzahl
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?