2017-10-03 9 views
0

isPrime関数を記述してJavaでブール値を返すとき、forループでMath.sqrt(number)を使用する多くの例を見てきました。なぜ誰かがこの機能がforループで何をしているのか説明できますか?参考のために例を付けました。ありがとう!JavaでisPrime関数を記述してMath.sqrtを使用する

+0

ループは、素数の候補に分けることのできるすべての可能な数をチェックしています。除数が見つかった場合は、その数を素数にすることはできません。 –

+1

sqrt(n)以外のすべてのケースでは、要因の1つが他方よりも大きくなります。より具体的には、1つの係数はsqrt(n)より大きく、他方はより小さい(そうでなければ、その積はnではない)。したがって、あなたがsqrt(n)まで反復した場合、可能なすべてのペアの要素の1つをチェックしたことになります。 –

+0

ループの1回の繰り返しごとに同じ平方根を再計算すると、パフォーマンスにも優れています。 –

答えて

0

数字nが素数であるかどうかをどのように知っていますか?最初の戦略は、2から(n-1)までのすべての数をテストすることです。すべての値iについて、nがiで割り切れるかどうかをチェックする。あなたがこのような私を見つけたら、nは素数ではありません。

本当にすべての値をテストする必要がありますか?いいえ、nの平方根に達するとすぐに、同じ "値"のペアをテストします。つまり、実行するテストの数を制限し、パフォーマンスを向上させるためにsqrtがあります。

0

数が素数でない場合はF1、F2が>数の平方根であれば、それはF1とF2

二つの要因に分解することができ、F1 * F2は次のようになります>数。したがって、これらの要因の少なくとも1つは、数値のsqrtに対して< =でなければなりません。数値が実際に素数であるかどうかを調べるには、< =をsqrtにテストするだけで済みます。

関連する問題