204. 计数质数---筛选法

题目:统计所有小于非负数整数 n 的质数的数量。

示例:

输入: 10
输出: 4
解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
题目分析:其实就是判断小于n的所有质数的个数。我使用的是筛选法:
设置标记数组flag[n+1],初始化都为false,已知2是质数,那么可以肯定的是凡是2的倍数的数都不是质数了,将这些数的标记都置为true。然后往下遍历发现3的标记仍未false说明3是质数,那么所有3的倍数的数都不是质数了,更新对应的标记。继续遍历下去;

class Solution {
public:
    int countPrimes(int n) {
        bool flag[n+1];
        for(int i=0;i<n+1;i++){
            flag[i]=true;        //标记数组初始化
        }
        int cnt=0;               //质数的个数
        for(int i=2;i<n;i++){
            if(flag[i]){         //如果这个数是质数
                for(int j=i+i;j<n;j+=i){    //那么该质数的所有倍数都不是质数了
                    flag[j]=false;
                } 
                cnt++;            //计数加一
            }
        }
        return cnt;
    }
};

猜你喜欢

转载自blog.csdn.net/LITTENg/article/details/80145690