1. 程式人生 > >[leetcode-204-Count Primes]

[leetcode-204-Count Primes]

class i++ color code tor div 開始 ima log

Description:
Count the number of prime numbers less than a non-negative number, n.

思路:

參考http://www.cnblogs.com/TonyYPZhang/p/5138018.html給出的方案以及wiki的方案:

技術分享

將第一個素數 2 賦值給 i。

當 i 小於 n 時:(2)

  • 對於以確定的素數 i ,將 i 的全部倍數標記為合數。(1)
  • 離 i 最近的下一個未被標記為合數的數即為素數。將下一個素數賦值給 i .

上面算法有可以優化的地方:

(1)步驟找合數,無需從 2 開始算 i 的倍數,而是從 i 倍開始算,即 i*i。舉個例子,當 i 為 5 時, 5*2, 5*3, 5*4 的記號,已經在 i 分別為 2,3,4的時候做了。所以,可以直接從 i 倍開始算。相應地,(2)步驟也可以優化 “為 i*i < n 時”。

vector<bool> prime(n,true);
  
  for(int i =2;i*i<n;i++)
  {
    if(prime[i] == false) continue;
    for(int j = i*i;j<n;j+=i)
    {
      prime[j] = false;
    }   
  }
   int ret = 0;
   for(int i=2;i<n;i++)
   {
     ret+=prime[i];
  }
  return ret;

[leetcode-204-Count Primes]