試行分割による素数性をテストするためのこのアルゴリズムに出くわしました このアルゴリズムを完全に理解しています
static boolean isPrime(int N) {
if (N < 2)
return false;
for (int i = 2; i <= Math.sqrt(N); i++)
if (N % i == 0)
return false;
return true;
}
それはうまく動作します。しかし、その後、同じように機能するこの別のものに出くわしましたが、その背後にあるロジックを完全には理解していません.
static boolean isPrime(int N) {
if (N < 2)
return false;
for (int i = 2; i * i<N; i++)
if (N % i == 0)
return false;
return true;
}
のようにi *i < N
振る舞うようi <= Math.sqrt(N)
です。もしそうなら、なぜですか?