Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
--- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
---- Algorithmen (http://www.informatikerboard.de/board/board.php?boardid=17)
----- Sieb des Eratosthenes (http://www.informatikerboard.de/board/thread.php?threadid=1057)
Geschrieben von DudiPupan am 31.10.2011 um 14:45:
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
Geschrieben von Jannik93 am 31.10.2011 um 17:08:
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
Geschrieben von DudiPupan am 01.11.2011 um 12:48:
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?
Geschrieben von GertGundel am 25.01.2016 um 11:19:
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
Forensoftware: Burning Board, entwickelt von WoltLab GmbH