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

时间:2014-09-01 03:33:19

标签: 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;
    }
}  

我得到的是

76127

然而,正确的答案是

3682913

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

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

4 个答案:

答案 0 :(得分: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);
    }

答案 1 :(得分:5)

正确的如Blorgbeard所示&#34;前1000个素数的总和&#34;与&#34;&lt; = 1000&#34; 的所有素数之和不同。

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

您需要重写主要内容,以获得前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);
}

输出:

3682913

答案 2 :(得分:0)

实际上你做的程序是找到最多1000的素数之和,它是76127,前1000个自然数的总和是3682913。

前1000个自然数的总和

int n=2,count=0;
long int sum=0;
while(count<1000){
    if(isPrime(n)){ 
        sum+=n;
        count++;
    }
    n++;
}
System.out.println(sum);

答案 3 :(得分:0)

#include<stdio.h>
#include<math.h>
int prime(int no,int lim)
{
    int i=2,flag=0;
    for(;i<=lim;i++)
    {
        if(no%i==0)
        {   
            flag=1;     
        }
    }
    return flag ;
}

int main()
{
    int i=4,count=2,j,k,l,n=4;
    double sum=5.0;

    for(;count<=1000;)
    {   
        j=sqrt(i);
        k=prime(i,j);
        if(k==0)
        {
            //printf("\n%d",i);
            sum+=(double)i;
            //for(l=0;l<100000;l++);//just to reduce speed of the program

            count++;
        }
    i++;

}
printf("\n%f",sum);
        return 0;   
}