leetcode - 204. 计数质数
题目:
代码:
#include <iostream>
#include <vector>
using namespace std;
//暴力解法:超时
/*int countPrimes(int n) {
int count = 0;
int flag = 0; //记录是否为质数:0 不是;1 是
for(int i = 2; i < n; i++){
for(int j = 2; j*j <= i; j++){
if(i % j == 0){
flag =1;
}
}
if(flag == 0){
count++;
}
flag = 0;
}
return count;
}*/
//埃氏筛
int countPrimes(int n) {
vector<int> isPrime(n, 1);
int ans = 0;
for (int i = 2; i < n; ++i) {
if (isPrime[i]) {
ans += 1;
if ((long long)i * i < n) {
for (int j = i * i; j < n; j += i) {
isPrime[j] = 0;
}
}
}
}
return ans;
}
int main(){
int n, res;
cin>>n;
res = countPrimes(n);
cout<<res;
return 0;
}