【发布时间】:2017-08-15 20:20:03
【问题描述】:
我明白为什么你只需要在下面的代码中循环i*i <= n:
public static boolean checkPrime1(int n){
for(int i = 2; i*i <= n; i++){
if(n%i==0)return false;
} return true;
}
因为其中一个因子应该小于 n 的平方根。
但我最近在看书,类似方法中循环的条件或守卫是i <= n/i
public static boolean checkPrime(int n){
for(int i = 2; i <= n/i; i++){
if(n%i == 0)return false;
} return true;
}
我知道这对这里的大多数人来说可能很明显,但是谁能简化第二个条件的工作原理?我看不出它如何等同于 n 的平方根。会很感激的
【问题讨论】:
-
如果 i*i
-
这是一道数学题,不是代码一,投票结束
-
除法运算比乘法运算慢,所以第一个代码更快。
标签: java algorithm math primes