-4

我刚开始做项目欧拉的问题,我在第 10 个问题上。这里是:10 以下的素数之和为 2 + 3 + 5 + 7 = 17。求所有低于 200 万的素数之和。

我的代码是:

public class SummationOfPrimes {
    public static void main(String[] args) {
        long sum = 2;
        for (int i = 2; i < 2000000; i++) {
            if (primeOrNot(i)) {
                sum += i;
            }
        }
        System.out.println(sum);
    }
    static Boolean primeOrNot(long input) {
        for (int i = 2; i < Math.sqrt(input); i++) {
            if (input % i == 0) {
                return false;
            }
        }
        return true;
    }
}

我得到错误的答案:143042032118

4

2 回答 2

3

顺便说一句,了解您的解决方案有多远总是有帮助的。

如果答案很接近(我认为是),那么我会立即关注您的素性测试,这是不正确的;您没有正确测试 4、9、...、49 等素数平方数;您需要向上取平方根并包括平方根(允许向下取整)。

for (int i = 2; i<= Math.sqrt(input); ++i){

反而。

起始循环值和总和的初始值也存在问题(确认 Jean-Baptiste Yunès):写long sum = 0;for (int i = 3...) 代替您当前拥有的值。

于 2013-06-26T13:01:12.277 回答
2

两个编程错误:首先,您开始i=2但您的总和已经是sum=2,将其更改为sum=0或开始于i=3;其次,您不会测试到平方根。

于 2013-06-26T13:34:16.730 回答