我通过试验师遇到了这个用于测试素数的算法我完全理解这个算法
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)
. 如果是这样,为什么?