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: 104
    

    Vielen 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


Anmelden zum Antworten