一、题目
1、题目描述
给定整数 n ,返回 所有小于非负整数 n 的质数的数量 。
示例 1:
输入:n = 10
输出:4
解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
示例 2:
输入:n = 0
输出:0
示例 3:
输入:n = 1
输出:0
2、基础框架
- C++版本给出的基础框架如下:
3、原题链接
https://leetcode.cn/problems/count-primes/
二、解题报告
1、思路分析
埃氏筛
(
1
)
(1)
(1)创建一个大小为n的标记数组,初始值为true。
(
2
)
(2)
(2)从2开始直到根号n,将其倍数值全部标记为false。
(
3
)
(3)
(3)然后从下标2开始遍历数组,统计值为true的个数。
2、时间复杂度
3、代码详解
class Solution {
public:
int countPrimes(int n) {
if (n<=2)return 0;
vector<bool>isPrime(n, true);
for(int i=2;i*i<n;i++) {
if (isPrime[i]) {
for(int j=2*i;j<n;j+=i) {
isPrime[j] = false;
}
}
}
int cnt = 0;
for (int i=2;i<n;i++) {
if(isPrime[i]) {
cnt++;
}
}
return cnt;
}
};
三、本题小知识
1.vector初始化。vectorre(n,value)