LeetCode 204.Count Primes (計數質數)
阿新 • • 發佈:2018-11-20
題目描述:
統計所有小於非負整數 n 的質數的數量。
示例:
輸入: 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; } };