素数代码

时间:2013-11-17 02:46:58

标签: java primes

首先我要说的是,我知道关于素数有很多问题,这更多是关于我的代码,特别是布尔语句。

public class SumPrime
{


public static void main(String[] args) {


     int top = inputInt("enter the number please");   
     int sum;
     if (top > 2) {
        sum = 2;
    } else {
        sum = 0;
    }
     int i;
     int l;

     for(l=3; l<top; l+=2){

        boolean k = test(l);
        String r;
        if(k = true){
          sum=sum+l;

          output(l);
        }else {
            sum=sum;
        }

    }
    System.out.println("The sum is " + sum);
    }


static boolean test(int v) {

   if (v%2==0) 
      return false;
   for(int i=3; i<v; i+=2) {
       if(v%i==0)
          return false;
    }
    return true;
}

我正在尝试编写一个程序,它将为我提供低于输入值的素数之和。 在上面的代码下面,我有输入/输出语句,所以这不是问题。至少对我来说,这段代码似乎应该没有问题。我对java比较新,对布尔变量和语句也很新,所以很容易出现问题。 (我找了一个答案,一无所获)

测试子程序应检查数字是否为素数,如果是,则返回true,否则返回false。它似乎对每个值都返回true,即使对于非素数的数字也是如此。程序返回26的总和,而不是17如果我输入10作为上限。它似乎包括每个奇数,即使它应该检查素数。

我无法弄清楚为什么这段代码不起作用。就像我说的,我认为错误与布尔方法有关。

2 个答案:

答案 0 :(得分:2)

如果你用这个i&lt;测试9 9进行了测试。 当i = 9时,for循环中止并返回true

static boolean test(int v) {

   if (v%2==0) 
      return false;
   for(int i=3; i<v; i+=2) {
       if(v%i==0)
          return false;
    }
    return true;
}

修改:

你也不应该测试超过目标数量一半的素数,理想最大值是sqrt(x)+ 1

答案 1 :(得分:1)

您的问题与布尔方法无关。你的病情很糟糕。您正在条件而不是实际测试相等性中执行赋值。因此,它始终会评估为true,并最终添加到您不应该添加的位置。

请改为:

if (k) {
  sum += l;
}

顺便说一句,sum = sum没有任何东西,也应该删除。