我理解为什么你只需要在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的平方根相当。会很感激
答案 0 :(得分:3)
i*i <= n
与i <= n/i
完全相同。
算一算吧。
如果i
为正数(在这种情况下始终是正数),则可以将条件乘以i
,并将运算符(<=
)保持不变。
答案 1 :(得分:0)
两者完全相同。将其视为数学运算。如果i=n/i
则i*i=n
。同样,此处i*i <= n
和i <= n/i
都会产生相同的结果。