2014-09-01 3 views
0

Вот что у меня естьСумма первых 1000 простых чисел неверна? что не так?

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

Я не в состоянии определить ошибка в моем коде, любая помощь здесь?

+15

«Сумма первых 1000 простых чисел» - это не то же самое, что [«сумма всех простых чисел <= 1000»] (http://www.wolframalpha.com/input/?i=sum+primes+ % 3C% 3D + 1000) – Blorgbeard

+0

Вы можете сделать это немного более эффективным, запустив сумму на 2, i на 3 и вернув false в isPrime для всего, что кратно 2. Тогда вы можете запустить isPrime i на 3, и увеличивать на 2 в каждом цикле, тем самым проверяя только нечетные числа. – graemeboy

ответ

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

Его правильно как указано 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 
+3

Er, и как это отличается от собственного ответа OP? выглядит как копия для меня ... –

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); 
+2

Этот код даже не компилируется. В Java логические значения нельзя сравнивать с числами - другими словами, это недопустимый код: 'isPrime (n) == 1' –

1

Ваша программа правильно, я просто проверял в 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 

печати («Сумма журнала фактор:», сумма/с) печать (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, но никогда не должна превышать его (Интересным TIDBIT).

Смежные вопросы