Мне интересно, есть ли более эффективный способ запуска этой программы? Он работает отлично для более низких чисел, но по мере увеличения, так же время - экспоненциально. Таким образом, число, подобное 1000000, берет навсегда (никогда не позволяйте этому закончить, поэтому я не знаю времени). Любая помощь будет оценена по достоинству.Более эффективный способ для этого?
import java.util.*;
public class SumOfPrimes {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
long number = 0;
System.out.println("This program outputs the sum of the primes of a given number.");
System.out.print("Please enter a number: ");
number = in.nextLong();
System.out.println("The sum of the primes below "+number+" is: "+sumOfPrimes(number));
}
public static long sumOfPrimes(long n){
long currentNum = 2;
long sum = 0;
if (n > 2){
sum = sum + 2;
}
while (currentNum <= n) {
if (currentNum % 2 != 0 && isPrime(currentNum)) {
sum = sum + currentNum;
}
currentNum++;
}
return sum;
}
public static boolean isPrime(long currentNum){
boolean primeNumber = true;
for (long test = 2; test < currentNum; test++) {
if ((currentNum % test) == 0){
primeNumber = false;
}
}
return primeNumber;
}
}
http://en.wikipedia.org/wiki/Memoization и/или http://en.wikipedia.org/wiki/Dynamic_programming –
Почему тестовые номера, например, 4,6,8 ..., увеличиваются на два. – blamonet
[Эффективные алгоритмы генерации простых чисел] (http://en.wikibooks.org/wiki/Efficient_Prime_Number_Generating_Algorithms) –