[英]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.