204.count primes

思路: 這道題的核心是判斷一個數是否爲素數,但是如果利用最簡單的將n以內的數遍歷會超時。

新的思路爲那些素數的倍數的數爲合數,所以可以將這些數排除,而對於一個素數p,只需要從p2開始排除,因爲之前的數已經被更小的素數排除了。最後還有一點可以改進,就是p只需要判斷到就可以了,以爲此時p2已經大於n了。


class Solution {

public:
    int countPrimes(int n) {
      bool*isPrime = new bool[n];
for (int i = 2; i < n; ++i)
isPrime[i] = 1;
for (int i = 2; i*i < n; ++i)
{
if (isPrime[i])
{
for (int j = i*i; j < n; j = j + i)
isPrime[j] = 0;}
}
int count = 0;
for (int i = 2; i < n; ++i)
{
if (isPrime[i])
count++;
}
return count;
    }
};
發佈了40 篇原創文章 · 獲贊 19 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章