所有素数之和在100到200之间

时间:2018-04-29 14:35:35

标签: java int boolean primes

我实际上要放松一下......我写的代码显示了各种各样的"总和"和"计数"在我要用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; 
    }
}

3 个答案:

答案 0 :(得分:1)

一些事情。

首先,您的isPrim可以进行优化,以便i仅递增到sqrt(number)

其次,如果return false(number%i == 0),您需要true。现在,它总是返回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; 
    }
}

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

对于介于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;
    }
}