第十四題:計數質數
阿新 • • 發佈:2018-12-30
問題描述
統計所有小於非負整數 n 的質數的數量。
示例:
輸入: 10
輸出: 4
解釋: 小於 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。
解決方式
埃拉託斯特尼篩法在每次找到一個素數時,將能被素數整除的數排除掉。
給出要篩數值的範圍n,找出以內的素數。先用2去篩,即把2留下,把2的倍數剔除掉;
再用下一個質數,也就是3篩,把3留下,把3的倍數剔除掉;
接下去用下一個質數5篩,把5留下,把5的倍數剔除掉;
不斷重複下去…。
class Solution { public: int countPrimes(int n) { bool *isPrime=new bool[n]; for (int i = 2; i < n; i++) { isPrime[i] = true; } for (int i = 2; i * i < n; i++) { if (!isPrime[i]) continue; for (int j = i * i; j < n; j += i) { isPrime[j] = false; } } int count = 0; for (int i = 2; i < n; i++) { if (isPrime[i]) count++; } return count; } };