O(N) prime check Euler Sieve

Here is the Euler Sieve method :

Solution

class Solution {
public:
    int countPrimes(int n) {
        if (n == 0) return 0;
        vector<bool> flag(n, false);
        vector<int> p(n, 0);
        int index = 0;
        flag[0] = true, flag[1] = true;
        for (int i = 2; i <= n; i++) {
            if (!flag[i]) p[index++] = i;
            for (int j = 0; i * p[j] <= n; j++) {
                flag[i*p[j]] = true;
                if (i % p[j] == 0) break;
            }
        }
        return count(flag.begin(), flag.end(), false);
    }
};

The original solution is like this :

class Solution {
public:
    int countPrimes(int n) {
        if (n == 0) return 0;
        vector<int> prime(n, true);
        prime[0] = false, prime[1] = false;
        for (int i = 0; i < sqrt(n); i++) {
            if (prime[i]) {
                for (int j = i*i; j < n; j += i) {
                    prime[j] = false;
                }
            }
        }
        return count(prime.begin(), prime.end(), true);
    }
};
Comments (0)