Hallo liebe Foren-Mitglieder,
im Rahmen meines Studiums belege ich an der Uni den Kurs "Grundlagen der Programmierung" (mit Java). Ich bräuchte nun Hilfe bei der folgenden Aufgabe:
"Mit dem Sieb des Eratosthenes kann für alle Zahlen von 2 bis zu einer Grenze M bestimmt werden, ob es sich um Primzahlen handelt.
Schreiben Sie ein Programm, das über das Sieb des Eratosthenes die ersten N Primzahlen ausgibt, wobei N Ihrem Programm als Kommandozeilenparameter übergeben werden soll.
Da nun eine beim Programmieren noch nicht bekannte Anzahl von Primzahlen gesucht wird, kann es sein, dass eine gewählte Grenze M für das Sieb nicht ausreicht. In diesem Fall soll die Grenze erhöht und die gesamte Berechnung erneut durchgeführt werden. Starten Sie z.B. mit einer Grenze M für das Sieb von 9 und erhöhen Sie die Grenze nach jedem Durchlauf um Faktor 10."
Ich habe dazu schon den folgenden Ansatz:
Hier komme ich nun nicht weiter. Mein Problem ist, dass ich keine Idee habe für einen Algorithmus, d.h. ich weiß nicht, wie ich dem Programm begreiflich mache, dass ich die ersten N Primzahlen haben möchte (und nicht die Primzahlen bis zu einer bestimmten Grenze).
Habt ihr eine Idee bzw. könnt mir einen Gedankenanstoß geben erstmal für einen Algorithmus (in deutscher Sprache)? Danach würde ich dann versuchen, diesen in Java umzuschreiben.
Ich bin für Eure Hilfe dankbar und freue mich auf Antworten
im Rahmen meines Studiums belege ich an der Uni den Kurs "Grundlagen der Programmierung" (mit Java). Ich bräuchte nun Hilfe bei der folgenden Aufgabe:
"Mit dem Sieb des Eratosthenes kann für alle Zahlen von 2 bis zu einer Grenze M bestimmt werden, ob es sich um Primzahlen handelt.
Schreiben Sie ein Programm, das über das Sieb des Eratosthenes die ersten N Primzahlen ausgibt, wobei N Ihrem Programm als Kommandozeilenparameter übergeben werden soll.
Da nun eine beim Programmieren noch nicht bekannte Anzahl von Primzahlen gesucht wird, kann es sein, dass eine gewählte Grenze M für das Sieb nicht ausreicht. In diesem Fall soll die Grenze erhöht und die gesamte Berechnung erneut durchgeführt werden. Starten Sie z.B. mit einer Grenze M für das Sieb von 9 und erhöhen Sie die Grenze nach jedem Durchlauf um Faktor 10."
Ich habe dazu schon den folgenden Ansatz:
Java:
import java.util.Scanner;
public class Sieb {
public static void main(String[] args) {
int M = 1; //Variable M (1.Primzahl bis M-te Primzahl)
int N;
Scanner eingabe = new Scanner(System.in);
N = Integer.valueOf(eingabe.next());
boolean[] p = new boolean[M];
for (int i=2; i<M; i++)
p[i] = true;
for (int i=2; i*i<M; i++) {
if (p[i]) {
for (int n=2; n*i<M; n++)
p[n*i] = false;
//wenn n*i<M, dann setze Boolschen Wert auf "false" (d.h. Vielfache von i nicht prim)
}
}
for (int i=2; i<M; i++)
if (p[i])
System.out.println(i);
}
}
Hier komme ich nun nicht weiter. Mein Problem ist, dass ich keine Idee habe für einen Algorithmus, d.h. ich weiß nicht, wie ich dem Programm begreiflich mache, dass ich die ersten N Primzahlen haben möchte (und nicht die Primzahlen bis zu einer bestimmten Grenze).
Habt ihr eine Idee bzw. könnt mir einen Gedankenanstoß geben erstmal für einen Algorithmus (in deutscher Sprache)? Danach würde ich dann versuchen, diesen in Java umzuschreiben.
Ich bin für Eure Hilfe dankbar und freue mich auf Antworten