LeetCode 204 Count Primes 欧拉(素数)筛
Given an integer \(n\), return the number of prime numbers that are strictly less than \(n\).
Solution
统计小于 \(n\) 的素数个数。这里用欧拉筛来筛素数,\(is\_prime\) 用来记录该数是否为素数,\(prime\) 来保存所有的素数
点击查看代码
class Solution {
private:
bool is_prime[5000002];
vector<int> primes;
void GetPrime(int n, vector<int>& primes){
is_prime[0] = 0; is_prime[1]=0;
memset(is_prime, true, sizeof(is_prime));
for(int i=2;i<n;i++){
if(is_prime[i]) primes.push_back(i);
for(int j=0;j<primes.size() && i*primes[j]<n;j++){
is_prime[i*primes[j]]=0;
if(i%primes[j]==0)break;
}
}
}
public:
int countPrimes(int n) {
if(n==0||n==1) return 0;
GetPrime(n, primes);
return primes.size();
}
};