题目
统计所有小于非负整数 n 的质数的数量。
示例:
输入: 10
输出: 4
解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
代码模板:
class Solution {
public int countPrimes(int n) {
}
}
分析
用埃拉托色尼筛选法。先把所有数设定为true,那么这个数的平方,平方+i也不会是素数,把不是的置成false。如果循环遇到这个数是false,就直接跳过。
解答
class Solution {
public int countPrimes(int n) {
boolean [] nums = new boolean[n];
for(int i = 2;i < n;i++){
nums[i] = true;
}
for(int i = 2;i * i < n;i++){
if(!nums[i]){
continue;
}else{
for(int j = i * i;j < n ;j = j + i){
nums[j] = false;
}
}
}
int result = 0;
for(int i = 2;i < n;i ++){
if(nums[i]==true){
result++;
}
}
return result;
}
}