Primzahltest im Java programmieren?
Hey Leute, ich muss in Jave einen Primzahltest programmieren und komme nicht weiter. Da wir die Eingabe noch nicht durchgenommen haben, sollen wir als zu testende Zahl einfach x=4711 initialisieren.
Mein "Programm" sieht bisher wie folgt aus (hier jetzt ohne class und public static voic main usw. - nur Code):
long x=4711;
if (x<=1){ System.out.println(Keine Primzahl); }
else
Ab hier komm ich nicht genau zurecht. Wie mach ich denn eine Schleife die auf die jeweiligen Teiler prüft und dann jeweils die Ausgabe "Ist eine Primzahl" oder "Ist keine Primzahl" tätigt?
2 Antworten
Mit % kannst du den ganzzahligen Divisionsrest zurückbekommen. Wenn du also z.B. 21 % 2 rechnest, dann bekommst du "1" zurück. (21 / 2 = 10, Rest 1).
Du müsstest also eine Schleife mit einer Variable "teiler" von 2 bis (x - 1) durchlaufen (nimm eine for-Schleife), in jedem Schritt musst du dann den Divisionsrest von x % teiler ermitteln. Wenn der irgendwann mal 0 wird, dann ist es keine Primzahl. Wenn die Schleife durchläuft, ohne dass der Divionsrest 0 wird, dann ist es eine Primzahl.
Versuch das mal in Code zu pressen.
bool isPrimzahl = true;
for (long teiler = 2; teiler < x; teiler++) {
if (x % teiler == 0) {
isPrimzahl = false;
break;
}
}
if (isPrimzahl == true) {
System.out.Println("Primzahl");
}
else {
System.out.Println("keine Primzahl");
}
Ich hab das mal soweit alles ausgeschrieben, klar könnte man da noch einiges kürzen und optimieren, aber erstmal geht's ja ums Verständnis.
Deine Schleife hatte übrigens noch einen kleinen Fehler, du willst nicht "solange teiler <= x", sondern "solange teiler < x" prüfen. Deine Schleife würde dir jede Zahl als "keine Primzahl" erkennen, denn wenn x == teiler, dann ist der Rest immer 0 - jede Zahl ist durch sich selbst glatt teilbar.
// x gegeben
bool isPrime = false;
if (x == 2) isPrime = true else
if (x > 2) {
for (int ii = 3; i*i <= x; ii += 2) {
if (0 == x % ii) {
isPrime = true; break;
}
}
}
System.out.println(isPrime? "Primzahl" : "Keine Primzahl");
Ist CPP-Syntax, musst Du ggfs. an Java anpassen.
Was du da verwendest haben wir noch nicht durchgenommen und dürfen es leider daher nicht verwenden :/
Ohne eine Schleife läßt sich kein Primzahltest programmieren.
Also for oder while wird mindestens gebraucht
Den Test ob eine Zahl glatt durch eine andere teilbar ist kann man auch ohne Modulo-Funktion (%) programmieren
if ((testZahl / testTeiler) * testTeiler == testZahl) {
// keine Primzahl
}
Okay das mit der Schleife kann ich nachvollziehen, das müsste dann ungefähr so aussehen:
for (long teiler = 2; teiler <= x; teiler++){
x % teiler;
}
Wie genau mach ich das dann mit der Ausgabe?