Skip to content

Latest commit

 

History

History
40 lines (36 loc) · 1.33 KB

204. Count Primes.md

File metadata and controls

40 lines (36 loc) · 1.33 KB

204. 计数质数

统计所有小于非负整数 的质数的数量。

示例:

输入: 10 输出: 4
解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。 

解法一

//时间复杂度O(n), 空间复杂度O(1)
class Solution {
public:
    int countPrimes(int n) {
        vector<bool> isPrime(n, true);
        int res = 0;
        int sq = sqrt(n);
        for(int i = 2; i <= sq; i++) {
            if(!isPrime[i]) continue;
            for(int j = 2; i * j < n; j++) {//如果i是质数, 排除i的倍数
                isPrime[i * j] = false;
            }
        }
        for(int i = 2; i < n; i++) {
            if(isPrime[i]) res++;
        }
        return res;
    }
};

一开始用常规的搜索方法O(n^2),没有通过测试(超时错误)。解法一用的是埃拉托斯特尼筛法:

  1. 维护一个长为n的数组,用来标记元素i是否是质数,初始化都为true;
  2. 从2开始遍历,找到第一个质数,将所有其倍数的标志设为false;
  3. 找下一个质数,反复进行2的操作;
  4. 遍历完后,统计数组true的个数,即是质数的个数。
2019/04/27 23:19