/* lösung zum übungsblatt "sieb des eratostenes" von dominik panzer
anmerkung: im array werden keine objekte gespeichert, da es genügt einfach den wert 0 als
dummy zu verwenden für gelöschte werte, ergebnis ist das selbe.
algorithmus
2 zählervariavlen, einer usereingabevariable, ein array für den zahlenraum 2 bis n und die usereingabe referenz erstellen
n einlesen
wenn n kleiner gleich 1 abbrechen
array erzeugen mit genug platz für 2..n
werte eintragen
jedes feld auslesen, alle felder rechts davon mod mit dem wert des ersten feldes
wenn 0 dann löschen
solange bis alle felder durch sind
ergebnis ausgeben.
*/
class siebdeseratostenes //start der klasse
{
public static void main ( String [] args ) //die hauptmethode
{
int i; //countervariable 1
int j; //und nummer 2
int zahl; // repräsentiert den wert n
int filterarray_ref[]; //das zahlenarray
StdEingabe instream_ref; //diereferenzvariable des userinputs
instream_ref = new StdEingabe(); //objekt erzeugen
zahl = instream_ref.liesIntegerN("Eingabe fuer Wer n: "); //daten einlesen
if (zahl <= 1) //evtl abbrechen
{
System.out.println("n muss größer 1 sein");
return;
}
filterarray_ref = new int[zahl - 1]; // -1 da die "1" unberücksichtigt bleibt
for (i=0; i<filterarray_ref.length; i++) //array füllen
filterarray_ref[i] = i + 2; //2 ist der erste wert, i anfangs 0
for (i=0;i<=filterarray_ref.length;i++) //jedes feld durchgehen
{
for (j=i+1;j<filterarray_ref.length;j++) //jedes feld rechts des gewählten feldes
{
if (filterarray_ref[j] != 0 && filterarray_ref[i] != 0) //mod 0 ungültig, daher als dummy
if (filterarray_ref[j] % filterarray_ref[i] == 0) filterarray_ref[j] = 0;
}
}
System.out.println("Die Primzahlen bis n = " + zahl + " lauten:"); //ergebnis output
for (i=0;i<filterarray_ref.length;i++)
{
if (filterarray_ref[i] != 0)
System.out.print(filterarray_ref[i] + " ");
}
System.out.println();
}
}