xinyu04

导航

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();
    }
};

posted on 2022-07-29 19:23  Blackzxy  阅读(22)  评论(0编辑  收藏  举报