Java Primzahl boolean?

4 Antworten

  1. Der höchstmögliche Wert für einen Teiler wäre die Quadratwurzel von "zahl".
  2. Du könntest zu Anfang überprüfen, ob "zahl" gerade und ungleich 2 ist, dann sparst du dir für den Fall alle weiteren Tests.
  3. Beginne "moeglicherTeiler" mit dem Wert 3 und erhöhe beim Hochzählen um 2.
  4. Pack das return direkt unter das if, dann sparst du dir unnötige Schleifendurchläufe.
  5. Zahlen, die kleiner als 2 sind, sind keinesfalls Primzahlen. Überprüfe das vor der Schleife.

Eine stark optimierte Version könnte z.B. so aussehen:

public static boolean istPrim(long zahl) {
    //2 ist die kleinste (und einzige) gerade Primzahl
    if(zahl < 2) return false;
    if(zahl == 2) return true;
    //Alle anderen geraden Zahlen sind keine Primzahlen
    if(zahl & 1 == 0) return false;
    //Es reicht aus, bis zur Quadratwurzel von "zahl" zu testen
    long hoechsterTeiler = Math.sqrt(zahl);
    //3 ist die erste Primzahl nach der 2
    //"moeglicherTeiler" wird in jedem Durchlauf um 2 erhöht, denn gerade Teiler sind bereits ausgeschlossen
    for(long moeglicherTeiler = 3; moeglicherTeiler <= hoechsterTeiler; moeglicherTeiler += 2)
        //Wenn sich "zahl" ohne Rest durch "moeglicherTeiler" teilen lässt, dann ist "zahl" keine Primzahl
        if(zahl%moeglicherTeiler==0) return false;
    //Wenn der Code hier ankommt, dann ist "zahl" eine Primzahl
    return true;
}

Dein Ansatz ist richtig - ließe sich jedoch noch kräftig optimieren. 😉

Du brauchst z.B. nur bis Wurzel(Zahl) hochzählen, wenn es einen Teiler gibt kann er nämlich maximal so groß sein. Außerdem kannst du in der Schleife gleich in der if-Bedingung return false schreiben. Somit sparst du Rechenzeit. Nur als kleine Anregungen ;)

Du brauchst nur bis Zahl/2 zu prüfen. Es gibt noch weitere Optimierungsmöglichkeiten, wenn die Zahl z.Bsp. Nicht durch 2 Teilbar ist, kannst du eh alle geraden Teiler weglassen....

Woher ich das weiß:Berufserfahrung

du musst rückwärts zählen von der gewünschen zahl bis 1. wenn die zahl nur durch sich selbst oder 1 teilbar ist, dann ist eine primzahl. ansonsten abbrechen und primzahl false