首页
学习
活动
专区
圈层
工具
发布

素数码
EN

Stack Overflow用户
提问于 2013-11-17 02:46:58
回答 2查看 1.3K关注 0票数 0

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

代码语言:javascript
复制
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。它似乎对每个值都是正确的,甚至对于不是素数的数字也是如此。程序返回一个26和,而不是17,如果我输入10作为上限。它似乎包括每一个奇数,即使它应该检查素数。

我不明白为什么这段代码不能工作。就像我说的,我认为这个错误与布尔方法有关。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-17 03:03:32

您的问题与您的布尔方法无关。你的情况很糟。您在条件中执行赋值,而不是实际测试相等性。因此,它总是计算为true,最后添加不应该添加的地方。

取而代之的是这样做:

代码语言:javascript
复制
if (k) {
  sum += l;
}

顺便说一句,sum = sum并不是这样,也应该被删除。

票数 1
EN

Stack Overflow用户

发布于 2013-11-17 02:52:21

如果你用这个测试9,我<9就是测试。当i=9时,for循环中止并返回true

代码语言:javascript
复制
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。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20026577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档