【问题标题】:sum of all prime numbers between 100 and 200100 到 200 之间的所有素数之和
【发布时间】:2018-10-09 19:03:15
【问题描述】:

我实际上要失去理智了...我编写的代码显示了我想用System.out.print(...) 显示的实际最后结果之间的各种“总和”和“计数”。有人能帮助我吗?我做错了什么让它显示所有内容?

public class Prim {
    public static void main(String[] args) {

        int end = 11;
        int count = 1;
        long sum = 0;

        for (int number = 10; count<=end; number++) {
            if (isPrim(number)) { 
               sum = sum + number;
               count++; 
               System.out.println(sum);
            }
        }
    }

    public static boolean isPrim(int number){
        for (int i=2; i<number; i++) {
            if (number % i == 0) {
            }
        }
        return true; 
    }
}

【问题讨论】:

  • 代码无法编译
  • isPrime 有时返回 false 怎么样?
  • 现在,这段代码无法编译。 isPrim 也什么都不做。
  • 首先,istPrimzahl()isPrim() 之间存在冲突,它们并不相同。然后,如果您的 isPrim() 方法在除法中找到一些空余数,则它应该返回 false。
  • 而且zahlnumber 不一样。您的代码中也没有任何内容可以检查数字是否在 100 到 200 之间。而且完全不清楚您在问什么 - 代码有什么问题,您期望什么以及实际发生了什么(方法和变量名错误可能是由于将代码翻译成英文的草率尝试)

标签: java int boolean primes


【解决方案1】:

一些事情。

首先,您的isPrim 可以优化,使i 只增加直到sqrt(number)

其次,如果(number%i == 0)true,则需要return false。现在,它总是返回 true,这就是您的代码输出所有总和的原因。

第三,您需要将istPrimeZahl 更改为isPrim(反之亦然),因为您尚未在任何地方定义istPrimeZahl

第四,你可以把sum = sum + number改成简单的sum += number

最后,您可能希望将System.out.print 行移动到下面两行,以便它只在循环结束后打印sum ,而不是在循环的每次迭代中。

(另外,您可能想要更改 for 循环,使其从 100 开始,而不是 10 :))

如果您想要最终版本,我已将其粘贴在这里:

public class Prim {
    public static void main(String[] args) {

        int end = 200;
        int count = 0;
        long sum = 0;

        for (int number = 100; number<=end; number++) {
            if (isPrim(number)) { 
               sum += number;
               count++; 
               System.out.println(sum);
            }
        }
    }

    public static boolean isPrim(int number){
        for (int i=2; i*i<=number; i++) {
            if (number % i == 0) {
                return false;
            }
        }
        return true; 
    }
}

【讨论】:

  • 为什么要使用计数器和结束参数?
  • 你应该 i*i
  • @idan 编辑了&lt;= 位... OP 可能需要count 才能知道有多少质数,end 更好,因为这意味着该值不是硬编码的进入for 循环。
【解决方案2】:

对于 100 到 200 之间的素数之和,试试这个代码:

public class Primzahlen {

    public static void main(String[] args) {
        int sum = 0;
        for (int i = 100; i < 200; i++)
            if (isPrim(i))
                sum += i;
        System.out.print(sum);
    }

    public static boolean isPrim(int num) {
        for (int i = 2; i <= Math.sqrt(num); i++)
            if (num % i == 0)
                return false;
        return true;
    }
}

【讨论】:

    【解决方案3】:

    isPrim 函数在 if 语句后缺少“return false”。这意味着 isPrim 将始终返回 true,因此每个数字都会写入控制台。

    System.out.print 也在 for 循环中,因此它每次都会打印更新的总和。目前尚不清楚这是否是故意的,但如果您只想获得一个结果,那么也应该将其移动两行。

    【讨论】:

      猜你喜欢
      • 2013-05-28
      • 2012-10-05
      • 2011-05-29
      • 2012-08-11
      • 1970-01-01
      • 2019-11-16
      相关资源
      最近更新 更多