簡體   English   中英

前1000個素數的總和不正確嗎? 怎么了?

[英]Sum of First 1000 primes not correct? what's wrong?

這是我所擁有的

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

我無法在代碼中發現錯誤,在這里有幫助嗎?

我完全誤解了這個問題。 以下工作很好

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);
    }

Blorgbeard“前1000個素數之和”指示的正確性與“ <= 1000的所有素數之和”不同

在您的情況下,主要是計算前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

您的程序是正確的,我剛剛在Python中對其進行了測試。

from math import *

def testPrime(num): #Takes a number as an argument
if num < 2:
    return False
if (num == 2):
    return True
else:
    for aNum in range(2, num):
        if (int)(num % aNum == 0):
            return False

    return True

# Allow user to enter input



c = 1
sum = 0
sumPrimes = 0
while (c < 100):
    if (testPrime(c)):

        print(c)
        sum = sum + log(c)
        sumPrimes = sumPrimes + c

   c = c + 1

print(“對數商和:”,sum / c)print(sumPrimes)

測試程序的一個好方法是手動添加前幾個素數(2、3、5)的集合。 答案很簡單,將其輸入到程序中並檢查輸出。

這是我的輸出:

2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
Sum of log quotient: 0.8372839039906392
1060

質數與其對數商的比率應接近1,但決不能超過它(一個有趣的花絮)。

實際上,您所做的程序用於查找最高達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);
#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;   
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM