计数质数
统计所有小于非负数整数 n 的质数的数量。
示例:
输入: 10
输出: 4
解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
分析
该题里有一个1500000的测试用例,导致不优化或者优化不到位的算法都会TLE。。。很坑。
本来想到对每个数字i,排除掉i的倍数,后续遇到时不在处理,然而这种还是会超时,有些无奈。于是只能求助了
下面的代码也是网上查到的,只能表示这种想法我想不到。
代码
class Solution {
//最关键有个1500000,大部分算法都超时了
public int countPrimes(int n) {
boolean[] noPrime = new boolean[n+1];
int count=0;
for(int i = 2;i<Math.sqrt(n);i++){
if(!noPrime[i]){
for(int j=i*i;j<n;j+=i){
noPrime[j] = true;
}
}
}
for(int j=2;j<n;j++){
if(!noPrime[j]){
count++;
}
}
return count;
}
}