Hey ihr!
Ich bin gerade dabei eine Aufgabe zu lösen, habe auch die bisher bekannte Primzahlberechnung in Java als Programm geschrieben, jedoch treten nun viele Probleme auf, sowie Fragen. Ich bin noch ein Anfänger was das Programmieren in Java betrifft und komme leider nicht weiter. Ich hoffe ihr könnt mir dabei helfen!
Die Aufgabe lautet:
Implementieren Sie die als „Sieb des Eratosthenes“ bekannte Primzahlberechnung mit Hilfe eines Arrays. Das Array repräsentiert alle ganzen Zahlen bis zu einer maximalen Zahl n (die von der Console eingelesen wird!). Nun werden nacheinander alle Vielfachen aller Zahlen, die kleiner als n/2 sind, im Array markiert. Diejenigen Zahlen im Array, die danach noch keine Markierung tragen, sind die Primzahlen. Für diese Aufgabe ist die Verwendung von Multiplikation und Division im gesamten Quelcode untersagt.
1. Ich verstehe nicht wie ich in meinem Quelltext die eine Multiplikation abändern soll und das Programm trotzdem noch läuft? (Ich darf ja dummerweise keine Division & Multiplikation anwenden)
2. Wie macht man eine "Markierung im Array" und wie soll man das mit allen Vielfachen der Zahlen anstellen?
Ich hoffe auf eine schnelle Antwort!
Liebe Grüße
Ich bin gerade dabei eine Aufgabe zu lösen, habe auch die bisher bekannte Primzahlberechnung in Java als Programm geschrieben, jedoch treten nun viele Probleme auf, sowie Fragen. Ich bin noch ein Anfänger was das Programmieren in Java betrifft und komme leider nicht weiter. Ich hoffe ihr könnt mir dabei helfen!
Java:
import java.util.Scanner;
/*Programm zur Berechnung von Primzahlen nach dem Sieb des Eratosthenes
* Diejenigen Zahlen im Array, die keine Markierung
* tragen, sind die Primzahlen.
*
*/
public class Eratosthenes {
public static void main(String[] args) {
// Benötigte Variablen deklarieren
int eingabe = 0;
// Für die Eingabe von der Tastatur
Scanner in = new Scanner(System.in);
// Anleitung
System.out.println("Geben Sie eine ganze Zahl ein, die größer als 1 ist: ");
// Eingabe, int-Wert einlesen
eingabe = in.nextInt();
// Aufforderung zu erneuter Eingabe, sofern eine Zahl <= 1 eingegeben
do {
// Anleitung
if (eingabe <= 1) {
System.out.println("Ihre Eingabe muss größer als 1 sein.");
System.out.println("Eingabe einer ganzen Zahl, die größer als 1 ist: ");
// Erneute Eingabe, Int-Wert einlesen
eingabe = in.nextInt();
}
} while (eingabe <= 1);
// Bezeichne "markiert" als "teilbar" ist
boolean[] teilbar = new boolean[eingabe + 1];
// Alle Stellen des Arrays auf false setzen
for (int i = 2; i < teilbar.length; i++) {
teilbar[i] = false;
}
// Vielfache bilden
for (int i = 2; i < teilbar.length; i++) {
// teilbar[i] == true
while (teilbar[i]) { // suche nächste noch nicht als "teilbar" markierten zahl
i++;
}
for (int j = i; j*i < eingabe; j++) {
teilbar[i * j] = true;
// nicht durchgestrichene Zahlen, d. h. die Primzahlen ausgeben
}
// hier wird die letzte Zahl auch ausgegeben wird unterdrückt mit && i < eingabe
if (! teilbar[i] && i < eingabe) {
System.out.println("Die " + i + "ist eine Primzahl. ");
}
}
}
}
Die Aufgabe lautet:
Implementieren Sie die als „Sieb des Eratosthenes“ bekannte Primzahlberechnung mit Hilfe eines Arrays. Das Array repräsentiert alle ganzen Zahlen bis zu einer maximalen Zahl n (die von der Console eingelesen wird!). Nun werden nacheinander alle Vielfachen aller Zahlen, die kleiner als n/2 sind, im Array markiert. Diejenigen Zahlen im Array, die danach noch keine Markierung tragen, sind die Primzahlen. Für diese Aufgabe ist die Verwendung von Multiplikation und Division im gesamten Quelcode untersagt.
1. Ich verstehe nicht wie ich in meinem Quelltext die eine Multiplikation abändern soll und das Programm trotzdem noch läuft? (Ich darf ja dummerweise keine Division & Multiplikation anwenden)
2. Wie macht man eine "Markierung im Array" und wie soll man das mit allen Vielfachen der Zahlen anstellen?
Ich hoffe auf eine schnelle Antwort!
Liebe Grüße
Zuletzt bearbeitet: