求素数

2019-12-06  本文已影响0人  momdiemg

初始化版本

int countPrimes(int n) {
    boolean[] isPrim = new boolean[n];
    // 将数组都初始化为 true
    Arrays.fill(isPrim, true);

    for (int i = 2; i < n; i++) 
        if (isPrim[i]) 
            // i 的倍数不可能是素数了
            for (int j = 2 * i; j < n; j += i) 
                    isPrim[j] = false;
    
    int count = 0;
    for (int i = 2; i < n; i++)
        if (isPrim[i]) count++;
    
    return count;
}


由于只需要判断根号n前是否为素数就行了所以范围又可以缩小一般
进阶改良版本

class Solution {
    public int countPrimes(int n) {
       boolean[] isPrim = new boolean[n];
    // 将数组都初始化为 true
    Arrays.fill(isPrim, true);

    for (int i = 2; i*i < n; i++) 
        if (isPrim[i]) 
            // i 的倍数不可能是素数了
            for (int j = i * i; j < n; j += i) 
                    isPrim[j] = false;
    
    int count = 0;
    for (int i = 2; i < n; i++)
        if (isPrim[i]) count++;
    
    return count;
    }
}

上一篇下一篇

猜你喜欢

热点阅读