解法
第一个问题需要考虑如何单纯的判断一个数字是否是素数
第二个问题就是如何加速for循环的判断
问题1
public boolean isP(int num)
{
for(int i=2;i*i<=num;i++)
{
if(num%i==0) return false;
}
return true;
}问题2
public int countPrimes(int n) {
boolean[] res=new boolean[n];
Arrays.fill(res,true);//最开始默认都是素数
for(int i=2;i*i<n;i++)
{
//判断当前是否是素数
if(isP(i))
{
for(int j=i*i;j<n;j+=i)
{
res[j]=false;
}
}
}
int count=0;
for(int i=2;i<n;i++)
{
if(res[i]) count++;
}
return count;
}总结
考虑到质数就要考虑到开根和平方

京公网安备 11010502036488号