Sieb des Eratosthenes

Neue Frage »

Auf diesen Beitrag antworten »
DudiPupan Sieb des Eratosthenes

Meine Frage:
Hallo allerseits,
ich arbeite gerad an meinen Übungen für den Programmierkurs und bin gerade bei folgender Aufgabe:

Das Sieb des Eratosthenes ist ein Algorithmus zur Bestimmung aller Primzahlen kleiner oder
gleich einer vorgegebenen Zahl n. Dazu notiert man alle Zahlen zwischen 2 und n. Dann gibt
man die Primzahl 2 aus, und streicht alle Vielfachen von 2 aus der Zahlenliste. Dann gibt
man die nachste Zahl in der Liste aus, die Primzahl 3, und streicht alle Vielfachen von 3. Da
die 4 als ein Vielfaches von 2 nicht mehr in der Liste existiert, wird als nachstes die Primzahl
5 ausgegeben, und wiederum alle Vielfachen von 5 gestrichen. Dieser Vorgang wird bis zur
Zahl n fortgefuhrt. Am Ende erhalt man alle Primzahlen kleiner oder gleich n als Ausgabe.


Meine Ideen:

Das soll ich in BlueJ in einer Methode implementieren.
Ich denke mal, dass ich eine boolean-Methode brauche, oder?
Ich versthe nur noch nicht ganz, wie das mit dem "rausstreichen" der verschiedenen Werte gemeint ist, bzw wie es umzusetzen ist.
Vielen Dank
 
Auf diesen Beitrag antworten »
Jannik93

Hallo,
also ich hab mir das mal alles aufgemalt und hab nun die Frage ob die ausgegebenden Zahlen in der Liste gestrichen werden sollen oder später auch ausgegeben werden sollen?

Zu deiner Frage du brauchst wahrscheinlich ein Array wo du dann den Benutzer fragst wie die Zahl n lauten soll z.b 12.

-->Sieb des Eratosthenes
Auf diesen Beitrag antworten »
DudiPupan

Also ich hab das jetzt mal auf folgendem Weg versucht:

public boolean [] aufgabe3(int n) {
boolean[] p = new boolean[n+1];
p[1]=false;
for(int i=2; i<p.length; i++) {
p[i]=true;
}
for (int i=2; i<=(n+1)/2;i++) {
for(int j=2; j<(n+1)/i; j++) {
p[i*j]=false;
}
}
return p;


}

Jedoch spuckt er den letzten wert immer mit dem wahrheitswert true aus, was mir ganz und gar nicht passt!
Was habe ich übersehen, wo liegt der fehler?
Auf diesen Beitrag antworten »
GertGundel Die Lösung

public boolean [] aufgabe3(int n) {
boolean[] p = new boolean[n+1];
p[1]=false;
for(int i=2; i<p.length; i++) {
p[i]=true;
}
for (int i=2; i<=(n)/2;i++) {
for(int j=2; j<=(n)/i; j++) {
p[i*j]=false;
}
}
return p;



so gehts
 
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »