letecode [204] - Count Primes

 Count the number of prime numbers less than a non-negative number, n.

Example:

Input: 10
Output: 4
Explanation: There are 4 prime numbers less than 10, they are 2, 3, 5, 7.

题目大意

  求所有小于非负整数n的质数的数量。

理  解:

   最直接的做法就是求每个数i 是否有2到 i-1间的因子。统计质数个数。但该方法时间复杂度太高,会超出时间限制。

  所有的非质数都含有质数因子,每找到一个质数变存入容器中,判断一个数i是否为质数时判断容器中元素是否为它的因子,没找到则该数为质数,也加入容器,但这个时间和空间复杂度也比较高。

  看了其他人的方法,厄拉多塞筛法,所有元素都设置为未访问状态,每访问一个状态为true的元素,将它的倍数都设置为false。最终得到的为true的元素即为质子。

代 码 C++:

class Solution {
public:
    int countPrimes(int n) {
        vector<bool> visited(n,true);
        int count = 0;
        for(int i=2;i<=sqrt(n);++i){
            if(visited[i]==true){
                for(int j=2;i*j<n;++j){
                    visited[i*j] = false;
                }
            }
        }
        for(int i=2;i<n;++i){
            if(visited[i]==true)
                count++;
        }
        return count;
    }
};

运行结果:

     执行用时 :100 ms, 在所有C++提交中击败了32.49%的用户

  内存消耗 :8.5 MB, 在所有C++提交中击败了76.65%的用户
posted @ 2019-06-13 11:12  lpomeloz  阅读(75)  评论(0编辑  收藏  举报