BlueJ Primzahlen?

2 Antworten

int primzahl = 1327;
int teiler = 2;
boolean isPrime = true;
while (teiler <= Math.sqrt(primzahl)) {
  if (primzahl % teiler == 0) {
    isPrime = false;
    break;
  }
  teiler++;
}
System.out.println(isPrime);

Ich habe mich am Code von colum123 orientiert. Ich würde allerdings ebenso wie der andere Antwortende hier die for-Schleife bevorzugen. Damit die Eingabe der Primzahl variabel ist, musst du den Code nur noch in eine Funktion kapseln, aber das kriegst du hin.

int primzahl = 1327;
boolean isPrime = true;

for(int i = 2; i <= Math.sqrt(primzahl); i++) {
  if(primzahl % i != 0) continue;
  isPrime = false;
  break;
}

System.out.println(isPrime);
Thomlol 
Fragesteller
 05.11.2019, 18:22

Wie gesagt, in der Methode wird while verwendet und die ist auch ganz einfach gehalten und die Zahl, welche man für die Variable einsetzt soll auch variabel bleiben und nicht schon festgelegt sein

0
colum123  05.11.2019, 18:57
@Thomlol
public boolean isPrime(int n) {
 int start = (int) Math.sqrt(n);
 while(start > 1) {
  if(n % start == 0) return false;
  start--;
 }
 return true;
}

jetzt zufrieden?

0
Thomlol 
Fragesteller
 05.11.2019, 19:07
@colum123

Ich hatte das schonmal in Informatik gehabt, habe aber vergessen wie das ging, doch ich weiß, dass es eine sehr viel einfachere Methode gab. Dort gibt man beim Test dann eine Zahl ein und im Ausgabefenster wird dann quasi die Zerlegung der Primzahl angezeigt. Dort kam meine ich nur der Befehl while vor und halt ein Modulo und auch nicht mehr. Das waren vlt gerade mal 2,3 geschriebene Zeilen.

0
colum123  05.11.2019, 22:22
@Thomlol

hier 3 zeilen:

public boolean isPrime(int n) {
 int start = (int) Math.sqrt(n);
 while(start > 1) { if(n % start-- == 0) return false; }
 return true;
}

und eine 1 zeilen version:

public boolean isPrimeN(int n) { return isPrime(n); }
0