前1000个素数的总和不正确?怎么了?

day*_*mer 0 java algorithm primes

这就是我所拥有的

public class SumOfPrimes {
    public static void main(String[] args) {
        long sum = 0;
        for (int i = 2; i <= 1000; i++) {
            if (isPrime(i)) {
                sum += i;
            }
        }
        System.out.println(sum);
    }

    private static boolean isPrime(final int number) {
        for (int i = 2; i * i <= number; i++) {
            if (number % i == 0) {
                return false;
            }
        }
        return true;
    }
}  
Run Code Online (Sandbox Code Playgroud)

我得到的是

76127
Run Code Online (Sandbox Code Playgroud)

但正确的答案是

3682913
Run Code Online (Sandbox Code Playgroud)

参考文献:http://www.wolframalpha.com/input/? i = sum + first + 1000+prime + numbers&x = 0&y = 0

我无法在我的代码中发现错误,这里有任何帮助吗?

day*_*mer 5

我完全误解了这个问题.以下结果没问题

public static void main(String[] args) {
        long sum = 0;
        int count = 0;
        int number = 2;
        while (count < 1000) {
            if (isPrime(number)) {
                sum += number;
                count++;
            }
            number++;
        }
        System.out.println(sum);
    }
Run Code Online (Sandbox Code Playgroud)


小智 5

其正确的通过Blorgbeard"前1000个素数的总和"所示是不一样的"其是<= 1000的所有素数的总和".

在你的情况下,主要是计算前168个素数的总和.

你需要重写main如下来获得前1000个素数的总和:

public static void main(String args[]){

    int number = 2;
    int count = 0;
    long sum = 0;
    while(count < 1000){
        if(isPrime(number)){
            sum += number;
            count++;
        }
        number++;
    }
    System.out.println(sum);
}
Run Code Online (Sandbox Code Playgroud)

输出:

3682913
Run Code Online (Sandbox Code Playgroud)

  • 呃,这与OP自己的答案有什么不同?看起来像是复制粘贴给我...... (3认同)