在给定范围之间找到素数的输出不符合预期

时间:2015-12-04 05:46:22

标签: java arrays

  

给定两个数字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

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;
    }