这就是我所拥有的
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
我无法在我的代码中发现错误,这里有任何帮助吗?
答案 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;
}