求质数的算法:埃拉托斯特尼筛法(如果使用笨方法会出现TLE)
关于该算法的详细解释,可以参考wikipedia:http://zh.wikipedia.org/wiki/%E5%9F%83%E6%8B%89%E6%89%98%E6%96%AF%E7%89%B9%E5%B0%BC%E7%AD%9B%E6%B3%95
下面是我的实现
<span style="font-family:Microsoft YaHei;font-size:14px;">class Solution {
public:
int countPrimes(int n) {
if(n <= 2) return 0;
int count = n - 2; //除去0和1
vector<int> flag(n,1); //flag[i]为true,代表是质数,0代表是合数
//flag[0] = flag[1] = 0;
for(int i = 2; i * i <= n; i++){
if(flag[i] == true){
for(int j = i; i * j < n; j++){
if(flag[i * j]){
flag[i * j] = false;
count--;
}
}
}
}
return count;
}
};</span>
http://zh.wikipedia.org/wiki/%E5%9F%83%E6%8B%89%E6%89%98%E6%96%AF%E7%89%B9%E5%B0%BC%E7%AD%9B%E6%B3%95