[leetcode-204-Count Primes]
阿新 • • 發佈:2017-05-21
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]