|
Sieb des Erastosthenes - Java
|
- Aufgabe
Finden von Primzahlen.
1. Boolean-Array mit true bis max befüllen
2. weil 0 und 1 laut Definition keine Primzahl, diese Streichen
(durch 0 ersetzen)
3. dann nächste nicht gestrichen Zahl suchen (2)
4. um den Wert dieser Zahl weitergehen und streichen (4,6,8,10)
5. wenn Ende des Arrays erreicht dann zu Punkt 3. gehen
6. übrig bleiben alle nichtgestrichenen Zahlen -> Primzahlen (2,3,5,7)
- Struktogramm
- Quellcode
import java.io.*
/** Funktion: Primzahlerzeugung nach der Methode "Sieb des Erastosthenes"
Applikation ohne Oberfläche, läuft in der Dos-Box: "java
erastos"
@author DG1XPZ
@version JDK131
*/
class erastos {
/** Funktion: Konstructor
@param Primzahl Zahl, bis zu der alle
Primzahlen ausgegeben werden sollen
*/
erastos(
int prim ) {
getPrim(
prim );
}
/**
Funktion: Konstructor
*/
erastos(
) { }
static boolean[ ] zahlen;
//Array "zahlen" deklarieren
public static void main(
String[
] vArgs ) {
erastos e = new
erastos
( );
//Instanz von
der Klasse "erastos" erzeugen
System.out.println("Sieb
des Erastosthenes, Primzahlen ausgeben.");
System.out.println("Bitte
Zahl eingeben, bis zu der die Primzahlen ausgegeben werden sollen:");
int prim =
e.eingabe(
);
//Max-Wert von Tastatur holen
zahlen=e.getPrim(
prim );
//Feld "zahlen" bearbeiten
System.out.println(e.toString(
)); //Feld "zahlen" ausgeben
}
/** Funktion: Eingabe (ganze Zahl) von
Tastatur einlesen
@exception IOException Wenn
keine Zahlen sondern Buchstaben o. Zeichen eingegeben wurden
@return
Die zurückgegebene Integerzahl
*/
private int eingabe(
) {
int m=0;
BufferedReader
eing=new
BufferedReader (new
InputStreamReader(System.in));
// Eingabepuffer erzeugt, für Eingabe über Tastatur
try {
//Fehlerbehandlung einleiten (try=versuche)
String
eingstr=eing.readLine(
);
// Lese String von Eingabepuffer (Tastatur)
m=Integer.parseInt(eingstr);
// Umwandeln String in Zahl
} catch(java.io.IOException
ioe) {
// wenn Fehler dann Meldung erzeugen
System.err.println("Fehler! Eingabe konnte nicht interpretiert
werden!");
// Ausgabe der Fehlermeldung wenn keine Zahlen eingegeben werden
}
return
m; //Rückgabe der
ganzen Zahl
} //private int
eingabe(
)
/** Funktion: Primzahlen erzeugen nach der
Methode "Sieb des Erastosthenes"
1. Boolean-Array mit true bis max füllen
2. weil 0 und 1 laut Def. keine Primzahlen
sind, diese streichen<br>
3. dann naechste nicht gestrichene Zahl suchen (2)<br>
4. um den Wert dieser Zahl weitergehen und streichen (4,6,8,10)<br>
5. wenn Ende des Arrays erreicht dann zu
Punkt 3. gehen<br>
6. übrig bleiben alle nichtgestrichenen Zahlen -> Primzahlen (2,3,5,7)<br>
@param max Die größte Zahl bis zu der die
Primzahlen gesucht werden sollen
@return
Rückgabe des Arrays mit Primzahlen (Feld:true=Primzahl)
*/
public boolean [
]
getPrim(
int prim
) {
zahlen=new
boolean[prim+1];
zahlen[1]=false;
//die 1 streichen
for (
int i=2;
i<zahlen.length;
i++){
zahlen[i]=true;
//alle Felder mit mit true belegen
}
for (
int i=2;
i<zahlen.length /
2;
i++){
for
(int j=2;j<zahlen.length
/ i);
j++){
zahlen[ i * j
] =false;
}
}
return
zahlen; //Rückgabe
des Arrays
} // public int [ ] getPrim(int prim)
/** Funktion: Den Inhalt des 1-Dimensionalen
Arrays zu einem String zusammenfügen
@return
Der zusammengefügte String
/*
public String toString(
)
{
String s="";
for (
int i=0; i<zahlen.length;
i++ ) {
if (zahlen[
i ]) s=s+ i
+",";
//wenn Feld true dann Wert von i zum String hinzufügen + Komma
}
s=s+"\n" );
//letztes Komma entfernen + Zeilenumbruch zum Schluss
hinzufügen
return
s;
//den String zurückgeben
} //public
String toString( )
} //class erastos
- Download erastos.java
- Download erastos.class
|
|
|