Primzahltest im Java programmieren?

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.


DerDecane 
Beitragsersteller
 14.11.2015, 11:14

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?

1
ceevee  14.11.2015, 14:34
@DerDecane

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.

0

// 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.


DerDecane 
Beitragsersteller
 14.11.2015, 11:16

Was du da verwendest haben wir noch nicht durchgenommen und dürfen es leider daher nicht verwenden :/

0
MalNachgedacht  14.11.2015, 11:50
@DerDecane

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

}

0