Primzahlentest

Dr Franke Ghostwriter
Ich bin ein völliger Neuling im Programmieren, also bitte Nachsicht wenn was gar nicht stimmt 😉

Ich hab euch hier mal meinen Lösungsvorschlag für den Primzahlentest - allerdings arbeitet er nicht sauber. Primzahlen erkennt er, bei "nicht-Primzahlen" spukt er jeweils 2x Nein aus.
Mir ist klar, dass er zwei mal auf die Anwendung stösst und daher das doppelte Ergebnis.

Ich hab mal probiert die oberste Anweisung wegzulassen, aber dann arbeitet er gar nicht mehr..?

Hat wer von euch einen Lösungsvorschlag dafür (am liebsten mit einfacher Erklärung)? Danke!

public void istPrimzahl(long n) {
//prüfe n Modulodivision m gleich null, wenn true gebe aus "NEIN"
//wenn false erhöhe m um 1 solange m < n
//wenn m = n breche ab und gebe aus "JA"
int m = 2;


{if ((n % m == 0) && (n != 2)) {
System.out.println("NEIN");
}
while ((m < n) && (n % m != 0)) {
m++;
}
if (m == n) {
System.out.println("JA");
}
if ((m < n) && (n % m == 0)) {
System.out.println("NEIN");
}

}
}

public static void main(String[] args) {
// Diese Variable kaennen sie veraendern, um Ihre
// Implementierung zu testen
int x = 20;
// Der nachfolgende Quelltext erzeugt nur die Ausgabe
System.out.print("Ist ");
System.out.print(x);
System.out.println(" eine Primzahl?");
new PrimzahlTester().istPrimzahl(x);
}


}
 
Du brauchst auch nur bis zur Hälfte der Zahlen auf Primzahlen prüfen 😉. Also "einfach"

Code:
int m = 2;
int maxIntegerToCheck = ((int) m/2) + 1

while (maxIntegerToCheck % m != 0)

Beispiel: bei der Primzahl 997 muss nur bis zur Zahl 499 (997/2 = 498.5) geprüft werden. Das verbessert die Performance der Funktion um 50% 😉.
 
Hab das hier mal zusammengewurstelt für alle die es interessiert.

private static boolean istPrimzahl(int a) {
for (int i = 1; i<Math.sqrt(a); i+=2) {
if(a%i=0) return false;
}
return true;
}

public static void main(String[] args) {
for ( int i = 1; i<=500; i++) {
System.out.println(a+" "+istPrimzahl(a));
}
}
 
Au weia.

Auch wenn es hart klingt: Zusammengewurstelt trifft es, denn da stimmt ja so gut wie nichts. Syntaxfehler ( Variable a nicht deklariert in main, Falscher Vergleichsoperator und Variablentyp in istPrimzahl) sowie ungeeigneter Algorirthmus. Die einzige Primzahl, die gefunden wird, ist 1.
 
Oben