1. 程式人生 > >LeetCode 204.Count Primes (計數質數)

LeetCode 204.Count Primes (計數質數)

題目描述:

統計所有小於非負整數 的質數的數量。

示例:

輸入: 10
輸出: 4
解釋: 小於 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。

 

AC C++ Solution:

解題思路:首先排除2之外的所有偶數,2預設算一個質數。使用一個標誌陣列(預設為false),從3開始遍歷,每次設定當前數及當前數的倍數的標誌位為true。每次遍歷到沒有標記的數,則計數+1。

class Solution {
public:
    int countPrimes(int n) {
        if(n <= 2)  return 0;
        
        vector<bool> passed(n,false);
        int sum = 1;
        int upper = sqrt(n);
        for(int i = 3; i < n; i+=2) {   //偶數一定不是質數,所以每次+2
            if(!passed[i]) {
                sum++;
                if(i>upper)
                    continue;           //i大於n的平方根後就不用設定i的倍數了
                for(int j = i*i; j < n; j+=i)   //把為i的倍數的位都設定為true,不進入質數計數
                    passed[j] = true;
            }
        }
        
        return sum;
    }
};