204

這題的做法實在太天才了,雖然已經偷看到解法,還是想寫一下來確定自己有理解他的演算法思路。概念上就是,每碰到一個質數,就把所有這個質數的倍數都砍掉,所以在看到2的時候,就把所有isPrime[2n]都設成True,並把質數的計數器count加上1。依序做到n之後,count的數字就是質數的數量。

class Solution {
public:
    int countPrimes(int n) {
        if (n==0) return 0;

        bool isPrime[n] = {false};
        int count = 0;

        for(int i=2; i<n; i++)
        {
            if(isPrime[i])
                continue;

            count ++;
            for(int j=i; j<n; j=j+i)
                isPrime[j] = true;
        }

        return count;
    }
};

results matching ""

    No results matching ""