2016-12-11 8 views
0

wenn gefunden, ein Prime-Checker in Java, die diese Methode verwendet. Kann jemand erklären, warum die for-Schleife zur Quadratwurzel der gesuchten Primzahl geht? - Gibt es einen effizienteren Weg, dies zu tun? - Vielen Dank!Java Prime Checker

public static boolean isPrime(int p){ 
      if(p % 2 == 0 || p < 2){ 
       return false; 
      } 
      else { 
       System.out.println("Sqare: " + (int)Math.sqrt(p)); 
       for(int i = 3; i <= (int)Math.sqrt(p); i = i+2){ 
        if(p % i == 0){ 
         return false; 
        } 
       } 
      } 

      return true; 
} 
+2

Mögliches Duplikat von [Warum überprüfen wir bis zur Quadratwurzel einer Primzahl, um festzustellen, ob es sich um Primzahl handelt?] (Http://stackoverflow.com/questions/5811151/why-do-we-check-up -zu-der-Wurzel-einer-Primzahl-zu-bestimmen-wenn-es-ist-pr) – rafid059

+1

Überprüfen Sie auch diese: http://stackoverflow.com/questions/1801391/what- Ist-der-beste-Algorithmus-zum-Prüfen-wenn-eine-Nummer-ist-Prime http://stackoverflow.com/questions/453793/which-is-the-fastest-algorithm-to-find-prime-numbers – rafid059

+0

Versuchen Sie, den Code zu trocknen, wenn Sie den Code verstehen möchten. Nimm verschiedene Zahlen und versuche, darauf zu laufen. Oder versuchen Sie es im Debugging-Environment. –

Antwort

2

Wenn eine Zahl keine Primzahl ist, dann hat es mindestens zwei Faktoren: 63 = 7 x 9 = 121 oder 11 x 11 zum Beispiel. Der kleinere der beiden Faktoren muss kleiner oder gleich der Quadratwurzel der ursprünglichen Zahl sein. Wenn Sie einen Faktor finden, ist die Zahl nicht prim, so dass Sie die Suche beenden können, sobald Sie den ersten Faktor gefunden haben.

Durch Suchen bis einschließlich der Quadratwurzel finden Sie garantiert einen Faktor einer zusammengesetzten Zahl. Wenn die Suche über die Quadratwurzel hinausreicht, ohne einen Faktor zu finden, muss die Zahl mit den Faktoren 1 und der Zahl selbst eine Primzahl sein. Es besteht keine Notwendigkeit, weiter über die Quadratwurzel hinaus zu suchen, da Sie nichts Neues lernen und Zeit verschwenden werden.