2016-12-11 3 views
0

このメソッドを使用するjavaのプライマリチェッカーがある場合、 forループが検索された素数の平方根に行く理由を誰かが説明できますか? - これを行うより効率的な方法はありますか? - ありがとう!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

[素数であるかどうかを調べるために素数の平方根を調べるのはなぜですか?](http://stackoverflow.com/questions/5811151/why-do-we-check-up素数の平方根から平方根に至るまでを決定する – rafid059

+1

また、これらをチェックしてください:http://stackoverflow.com/questions/1801391/what-数が正であるかどうかをチェックするための最善のアルゴリズムです。http://stackoverflow.com/questions/453793/which-is-the-fastest-algorithm-to-find-prime-numbers – rafid059

+0

コードを理解したい場合は、コードを実行してください。異なった数をとり、それらを実行しようとする。または、環境をデバッグしようとします。 –

答えて

2

数字がプライムでない場合は、少なくとも2つの要因、63 = 7 x 9または121 = 11 x 11などがあります。 2つの要素のうち小さい方が元の数の平方根以下でなければなりません。あなたが何か要因を見つけたら、その数は素数ではないので、最初の要素を見つけたら検索を止めることができます。

平方根までを検索することで、複合数の要素を見つけることが保証されます。係数が見つからずに探索が平方根を過ぎると、数は因子1と数そのもので素数でなければなりません。新しいことを学ぶことはなく、時間を無駄にするので、平方根を越えて探索を続ける必要はありません。

関連する問題