Sieb des Eratosthenes ... schwachsinnige Ausgabe
-
hi,
ich habe dieses kleine Programm zum finden von Primzahlen nach dem Algorithmus vom Sieb des Eratosthenes http://de.wikipedia.org/wiki/Sieb_des_Eratosthenes geschrieben:
#include <iostream> #include <math.h> using namespace std; class Zahl { public: int wert; bool prim; }; int main () { const int LIMIT = 100; Zahl Zahlen[LIMIT]; /* ------------------- Initialisieren--------------------------- */ for (int i = 0; i <= LIMIT; i++) { Zahlen[LIMIT].wert = i; // Durchzählen ... Zahlen[LIMIT].prim = true; // Alle Zahlen als Primzahlen ansehen } /* ---------------------Durchsieben---------------------------- */ int Sieb = 2; while (Sieb <= sqrt(LIMIT)) { for (int j = 0; j <= LIMIT; j++) { if (Zahlen[j].prim == true) if ((Zahlen[j].prim % Sieb) == 0) Zahlen[j].prim = false; } Sieb++; } // Test cout << Zahlen[77].wert << ": " << Zahlen[77].prim; return 0; }Leider bekomme ich als Ausgabe:
4007032: 104Vielen Dank!
mfg
Joachim
-
Deine beiden for Schleifen gehen 1 zu weit (101 Durchläufe). Statt <= nur < nehmen. Damit ist zumindest vor Beginn des Algorithmus bereits der Speicher verhunzt.
Des weiteren solltest Du in Deiner ersten Schleife als Array Index i benutzen und nicht immer ausserhalb des Arrays schreiben.
Damit erklärt sich dann auch die Ausgabe.
-
Vielen Dank. Hab ich nich gesehn.
Joachim