求素数

作者: momdiemg | 来源:发表于2019-12-06 10:38 被阅读0次

    初始化版本

    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;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:求素数

          本文链接:https://www.haomeiwen.com/subject/olbsgctx.html