搜索素数的两种方法

时间:2017-08-15 20:20:03

标签: java algorithm math primes

我理解为什么你只需要在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的平方根相当。会很感激

2 个答案:

答案 0 :(得分:3)

i*i <= ni <= n/i完全相同。 算一算吧。

如果i为正数(在这种情况下始终是正数),则可以将条件乘以i,并将运算符(<=)保持不变。

答案 1 :(得分:0)

两者完全相同。将其视为数学运算。如果i=n/ii*i=n。同样,此处i*i <= ni <= n/i都会产生相同的结果。