Hallo, zusammen vielleicht kann mir einer von Euch helfen. Hier die Aufgabenstellung.
Schreiben Sie ein möglichst effizientes Java-Programm, welches zwei Zahlen vom
Typ int als untere und obere Grenzen einliest und alle Primzahlen, die zwischen
diesen liegen, ausgibt. Erzwingen Sie für die Obergrenze die Eingabe einer Zahl, die
größer ist als die Untergrenze.
hier mal mein erstes Ansatz:
Frage, wieso funktioniert das Programm nicht, wenn die Zahlen zwischen 2Milliarden und 2Milliarden 1000 liegen.
Schreiben Sie ein möglichst effizientes Java-Programm, welches zwei Zahlen vom
Typ int als untere und obere Grenzen einliest und alle Primzahlen, die zwischen
diesen liegen, ausgibt. Erzwingen Sie für die Obergrenze die Eingabe einer Zahl, die
größer ist als die Untergrenze.
hier mal mein erstes Ansatz:
Java:
import AlgoTools.IO;
/**
* Sieb des Eratosthenes zur Ermittlung von Primzahlen. Idee: Streiche alle
* Vielfachen von bereits als prim erkannten Zahlen.
*/
public class Sieb {
public static void main(String[] argv) {
boolean[] prim;
int j,i,u_grenze, o_grenze;
IO.println("Gesucht werden Primzahlen zwischen 2000000000 und 2000010000");
do{
u_grenze=IO.readInt("Geben Sie eine untere Grenze an : " );
}while(u_grenze<2);
o_grenze=IO.readInt("Geben Sie eine obere Grenze an : " );
prim = new boolean[o_grenze];
for(i=u_grenze; i<o_grenze+) //alle Zahlen sind Primzahlen
prim[i] = true;
for (i=2; i<o_grenze; i++){
if (prim[i]) // falls i als Primzahl erkannt,
IO.println(i,5); // gib sie aus, und
for (j = i*i; 0<j && j < o_grenze; j = j+i) // fuer alle Vielfachen j von i
prim[j] = false; // streiche j aus der Liste
}
}
}
Frage, wieso funktioniert das Programm nicht, wenn die Zahlen zwischen 2Milliarden und 2Milliarden 1000 liegen.