Hallo zusammen,
ich versuche gerade das Sieb des Eratothenes durch Array zu programmieren aber irgendwie schaffe ich es nicht. Das Problem soll ohne modulo berechnet werden:
hier ist die Aufgabestelle:
Eratosthenes war ein antiker griechischer Mathematiker, der ungefähr 200 v. Chr. einen Algorithmus
aufstellte, mit dem man sehr effizient aus der Folge der natürlichen Zahlen alle Primzahlen bis zu
einer vorgegebenen Zahl ermitteln kann. Dieser Algorithmus heißt "Sieb des Eratosthenes".
Sieb des Eratosthenes:
1. Schreibe alle natürlichen Zahlen von 2 bis zu einer beliebigen Zahl n auf.
2. Streiche alle Vielfachen von 2 heraus
3. Gehe zur nächstgrößeren nicht gestrichenen Zahl und streiche alle Vielfachen von ihr heraus
4. Wiederhole 3 so lange, bis du keine Vielfachen streichen konntest.
5. Alle übrig gebliebenen Zahlen sind Primzahlen.
Implementieren Sie den Algorithmus in einer Funktion mit dem Prototyp
void siebe(int[] arr);
Festlegen des Index n, Aufruf des Algorithmus und Ausgabe der Primzahlen sind dann Aufgaben des
Testprogramms, d.h. der main()-Funktion.
Ein paar Tipps:
Statt "Schreibe alle natürlichen Zahlen von 2 bis zu einer beliebigen Zahl auf" nimmt man
programmiertechnisch am besten ein Array, welches man geschickterweise (natürlich im Rahmen
einer Laufschleife) zu Beginn wie folgt initialisiert:
arr[0]=0;
arr[1]=0; // kein Fehler!
arr[2]=2;
arr[3]=3;
:
arr[n]=n;
Statt "Streiche alle Vielfachen heraus" setzt man programmiertechnisch am besten die
entsprechenden Array-Elemente auf 0, um anzuzeigen, dass dieser Wert keine Primzahl ist. Also
(natürlich wiederum im Rahmen einer Laufschleife):
arr[4] = 0;
arr[6] = 0;
:
Dann sind alle Arrayelemente, die am Ende des Algorithmus noch ungleich 0 sind, die gewünschten
Primzahlen.
Testen nicht vergessen!
hier ist mein Versuch.
es würde mich sehr freuen, wenn ihr mir helfen könntet:
wäre auch nett , wenn ihr ein paar Erklärungen dazu schreibt.
Danke.
ich versuche gerade das Sieb des Eratothenes durch Array zu programmieren aber irgendwie schaffe ich es nicht. Das Problem soll ohne modulo berechnet werden:
hier ist die Aufgabestelle:
Eratosthenes war ein antiker griechischer Mathematiker, der ungefähr 200 v. Chr. einen Algorithmus
aufstellte, mit dem man sehr effizient aus der Folge der natürlichen Zahlen alle Primzahlen bis zu
einer vorgegebenen Zahl ermitteln kann. Dieser Algorithmus heißt "Sieb des Eratosthenes".
Sieb des Eratosthenes:
1. Schreibe alle natürlichen Zahlen von 2 bis zu einer beliebigen Zahl n auf.
2. Streiche alle Vielfachen von 2 heraus
3. Gehe zur nächstgrößeren nicht gestrichenen Zahl und streiche alle Vielfachen von ihr heraus
4. Wiederhole 3 so lange, bis du keine Vielfachen streichen konntest.
5. Alle übrig gebliebenen Zahlen sind Primzahlen.
Implementieren Sie den Algorithmus in einer Funktion mit dem Prototyp
void siebe(int[] arr);
Festlegen des Index n, Aufruf des Algorithmus und Ausgabe der Primzahlen sind dann Aufgaben des
Testprogramms, d.h. der main()-Funktion.
Ein paar Tipps:
Statt "Schreibe alle natürlichen Zahlen von 2 bis zu einer beliebigen Zahl auf" nimmt man
programmiertechnisch am besten ein Array, welches man geschickterweise (natürlich im Rahmen
einer Laufschleife) zu Beginn wie folgt initialisiert:
arr[0]=0;
arr[1]=0; // kein Fehler!
arr[2]=2;
arr[3]=3;
:
arr[n]=n;
Statt "Streiche alle Vielfachen heraus" setzt man programmiertechnisch am besten die
entsprechenden Array-Elemente auf 0, um anzuzeigen, dass dieser Wert keine Primzahl ist. Also
(natürlich wiederum im Rahmen einer Laufschleife):
arr[4] = 0;
arr[6] = 0;
:
Dann sind alle Arrayelemente, die am Ende des Algorithmus noch ungleich 0 sind, die gewünschten
Primzahlen.
Testen nicht vergessen!
hier ist mein Versuch.
Java:
public class SiebDesEratothenes {
public void sieb(int [] arr)
{
int prim = 2;
int idx;
int max = arr.length;
for(idx = 2; idx < max; idx++) // Alle natürlichen Zahlen von 2 bis max
{
for(idx = 2; (idx * 2) > max; --idx)
{
arr[idx * 2] = 0;
while(arr[idx] == 0)
{
arr[idx]++;
}
for(arr[idx] = 2; arr[idx * idx] < max; arr[idx]++)
{
while(arr[idx] != 0)
{
arr[idx] = prim;
System.out.print(prim);
}
System.out.println();
}
}
}
}
public static void main(String[] args) {
SiebDesEratothenes se = new SiebDesEratothenes();
int max = 120;
se.sieb(new int[max]);
System.out.println(se);
}
}
es würde mich sehr freuen, wenn ihr mir helfen könntet:
wäre auch nett , wenn ihr ein paar Erklärungen dazu schreibt.
Danke.
Zuletzt bearbeitet: