class Solution {
public int countPrimes(int n) {
if(n<=1) return 0;
int sum=0;
int[] nums=new int[n];
nums[0]=1;
for(int i=2;i<=Math.sqrt(n);i++){//乘法对称,所以判断√nq前的就OK
for(int j=i*i;j<=n;j+=i){
nums[j-1]=1;//非素数标记为1,剩下的即为质数
}
}
for(int i=0;i<n;i++){
if(nums[i]==0){
sum++;
}
}
if(nums[n-1]==0) sum--;//不包括终点
return sum;
}
}
埃氏筛法求质数个数
最新推荐文章于 2021-10-24 20:57:15 发布