# Sieb des Eratosthenes



## flashbrain (24. Mai 2005)

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...

```
#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;
}
```


----------



## Aylon (24. Mai 2005)

Wenn ich ehrlich bin hab ich mir das allles jetzt nicht so genau angesehen was mir nur aufgefallen ist ist folgendes:
	
	
	



```
for (i=0; i<0; i++)
{
feld[i] = i;
} // Felder eingerichtet
```
ist das so Absicht?
Und hmm 


```
int N, i, n, feld[N], x;
```


keine Ahnung ob das so ideal gemacht ist.(N und feld[N] halt)


----------



## Tobias K. (25. Mai 2005)

moin


Mich wundert das der Compiler bei  "int N, i, n, feld[N], x;" nciht meckert.


mfg
umbrasaxum


----------



## Konsumierer (25. Mai 2005)

Das hier

```
for (i=0; i<0; i++)
{
   feld[i] = i;
} // Felder eingerichtet
```
sollte wohl

```
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.


----------



## Ives (25. Mai 2005)

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


----------



## Flegmon (25. Mai 2005)

Ives hat gesagt.:
			
		

> 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


Das dürfte bei keinem Funktionieren.


----------

