Je me demande s'il existe un moyen plus efficace d'exécuter ce programme? Il fonctionne bien pour les nombres inférieurs, mais au fur et à mesure que vous augmentez, le temps augmente de façon exponentielle. Donc un nombre comme 1000000 prend une éternité (ne le laisse jamais finir donc je ne connais pas le temps). Toute aide serait appréciée.Un moyen plus efficace pour cela?
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 et/ou http://en.wikipedia.org/wiki/Dynamic_programming –
Pourquoi tester des nombres comme 4,6,8 ... incrémenter de deux à la place. – blamonet
[Algorithmes de génération de nombres premiers efficaces] (http://en.wikibooks.org/wiki/Efficient_Prime_Number_Generating_Algorithms) –