给定两个数字n1和n2作为输入,计算包含n1和n2之间所有素数的primesnos。
MyApproach
我接受了2个循环。对于从开始到结束的每个元素,我检查了元素是否为素数并增加了它们的计数。
public int getPrimes(int start,int stop)
{
int countprime=0;
boolean b1=true;
for(int j=start;j<=stop;j++)
{
for(int i=2;i<=j/2;i++)
{
if(j%i==0)
{
b1=false;
break;
}
}
if(b1==true)
countprime++;
}
return countprime;
}
Parameters Actual Output Expected Output
'6,11' 0 2
答案 0 :(得分:1)
对于外部循环中j
的每个值,您需要重新初始化b1 = true
。因为只要您发现j
不是素数,就会将您的旗帜b1
设置为false
,而永远不会重置。因此,如果j
是下一次迭代的素数,if (b1 == true)
将无法找到 true 路径,因为b1
已设置为false
。因此,countprime
不会增加。
请执行以下操作:
for(int j=start;j<=stop;j++)
{
b1 = true;
for(int i=2;i<=j/2;i++)
//rest of your codes...
旁注: i <= j/2
代替i <= sqrt(j)
,可以让您的代码更快!此外,您还可以阅读Sieve of Atkin。
答案 1 :(得分:1)
需要重置变量b1
b1 = true;
<强>代码强>
public static int getPrimes(int start, int stop) {
int countprime = 0;
boolean b1 = true;
for (int j = start; j <= stop; j++) {
b1 = true;
for (int i = 2; i <= j / 2; i++) {
if (j % i == 0) {
b1 = false;
break;
}
}
if (b1 == true)
countprime++;
}
return countprime;
}