Count the number of prime numbers less than a non-negative number, n.
思路:设置一个标志位数组flag[i],表示i是否已经被标记了。
循环sqrt(n) 次,把i的倍数的全部标记上。
最后没有标记的就是素数。比如n=15
把2的倍数 4,6,8,10,12,14标记上
把3的倍数 6 9,12;
剩下的2,3,5,7,11,13就是素数
代码如下(已通过leetcode)
public class Solution{
public int countPrimes(int n){
boolean[] flag=new boolean[n];
int count=0;
for(int i=2;i<n;i++)
flag[i]=false;
for(int i=2;i<Math.sqrt(n);i++){
if(!flag[i]){
for(int j=i;j*i<n;j++)
flag[j*i]=true;
}
}
for(int i=2;i<n;i++) {
if(!flag[i]) count++;
}
return count;
}
}