Sieb des Eratosthenes

flashbrain

Mitglied
Ich soll hier ne Liste mit Primzahlen herstellen und hab das Programm auch schon geschrieben aber irgendwo scheint ein Fehler zu sein...Ich sitz da seit Stunden dran und find ihn nicht ! Vielleicht könnt ihr mir ja helfen...
Code:
#include <iostream>
using namespace std;

#include <math.h>

int main ()
{
    int N, i, n, feld[N], x;
    cout << "Geben Sie eine Zahl ein bis zu der alle Primzahlen ermittelt werden sollen!" << endl;
    cin >> N;
    for (i=0; i<0; i++)
    {
        feld[i] = i;
    } // Felder eingerichtet
    
    feld [1] = 0;
    for (int n=2; n <= pow(N,1/2); n++)
    {
        if ( feld[n] != 0)
        {
             for (int i = n*n; i <= N; i++)
             {
                 if ( i%n == 0) // Falls teilen durch n restlos erfolgt
                 {
                      feld[n] = 0;
                 }
             }
        }
    }
    
    cout << "Foldende Primzahlen befinden sich zwischen 1 und " << N << ":" << endl;
    for (int i=1; i<=N; i++)
    {
        cout << feld[i];
        if (i%10 == 0)
        {
                 cout << endl;
        }
    }
    cin >> x;
    return 0;
}
 
Wenn ich ehrlich bin hab ich mir das allles jetzt nicht so genau angesehen was mir nur aufgefallen ist ist folgendes:
Code:
  for (i=0; i<0; i++)
{
feld[i] = i;
} // Felder eingerichtet
ist das so Absicht?
Und hmm

Code:
 int N, i, n, feld[N], x;


keine Ahnung ob das so ideal gemacht ist.(N und feld[N] halt)
 
Das hier
Code:
for (i=0; i<0; i++)
{
   feld[i] = i;
} // Felder eingerichtet
sollte wohl
Code:
for (i=0; i<N ; i++)
{
   feld[i] = i + 1;
} // Felder eingerichtet
heißen.

Bei dem Verfahren von Eratosthenes (den schreibt man glaub anders, aber kein Mensch weiß es) wird doch zunächst ein Array von 1 bis zur maximalen Zahl, die auf prim überprüft werden soll angelegt. Deine For-Schleife wird allerdings gar nie durchlaufen.

Edit: Du deklarierst am Anfang das Array mit int feld[N], obwohl N an dieser Stelle noch gar nicht bekannt ist! Selbst wenn du es nach der Eingabe von N deklarierst (was in C++ durchaus erlaubt ist) wird es wahrscheinlich nicht funktionieren, weil du dir den Speicher wahrscheinlich allokieren musst. Mit malloc & co. hab ichs zwar nicht so, aber ich denke, dass es damit gehen müsste.
 
Zuletzt bearbeitet:
Also bei meinem Compiler geht das nicht mit dem feld[N] außer ich deklariere N als globale Constante und weiße gleichzeitig einen Wert zu!
Greez Ives
 
Zurück