统计所有小于非负整数 n 的质数的数量。
示例:
输入: 10
输出: 4
解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
思路
什么是质数?就是这个数有除了1和自身外的约数,最小的质数是2
可以先标2的所有倍数得到下一个质数 3(因为 3未被标记 – 意味这3不是某个数的倍数; 而且小于3的数中只有质数或已经被标记的数);
然后标记所有3的倍数得到下一个质数为5
static class Solution {
public int countPrimes(int n) {
if(n<=1){
return 0;
}
int []a=new int[n];
for(int i=0;i<n;i++){
a[i]=0;
}
int cnt=0;
for(int i=2;i<n;i++){
if(a[i]==0){
cnt++;
//让当前质数的所有倍数做标记
int tmp=i+i;
while (tmp<n) {
a[tmp] = 1;
tmp += i;
}
}
}
return cnt;
}
}