统计所有小于非负整数 n 的质数的数量。
示例 1:
输入:n = 10
输出:4
解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
示例 2:
输入:n = 0
输出:0
示例 3:
输入:n = 1
输出:0
质数(Prime number),又称素数,指在大于 1 的自然数中,除了 1 和该数自身外,无法被其他自然数整除的数。 ———维基百科
这里用到筛选法,从2开始遍历,遍历到sqrt(n)即可,因为再往后是重复运算
如果该元素i的位置为true,(为false则表示已经被删除了,不为质数)则表示该位置i元素为质数,每次删除从i2开始(因为i2之前的数已经被删除了),每隔i个位置删除一下
最后统计true数量便可以
class Solution {
public int countPrimes(int n) {
if(n<2){
return 0;
}
int sum=0;
boolean[] b = new boolean[n];
Arrays.fill(b,true);
for(int i=2;i*i<n;i++){
if(b[i]){
for(int j=i*i;j<n;j+=i){
b[j]=false;
}
}
}
for(int i=2;i<n;i++){
if(b[i]){
sum++;
}
}
return sum;
}
}