J'ai fait un simple programme de tamisage des erastothènes pour calculer la somme des nombres premiers jusqu'à n pour le projet euler. Il fonctionne très bien pour 100, 1 000, 10 000 et ainsi de suite, mais quand je fais 1 ou 2 millions d'euros, il me donne ceci:Erreur lors de la recherche de nombres premiers plus importants
java.lang.ArrayIndexOutOfBoundsException: -2146737495
Il ne se produit pas pour les petits nombres, j'utilise des tableaux booléens.
boolean[] primes = new boolean[2000001];
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 2; i < primes.length; i++){
primes[i] = true;
}
boolean stop = false;
int target = 2;
int cycles = 1;
while (!stop) {
list.add(target);
for (int i = target;; i ++) //
{
if (target*i >= primes.length) {//
break;
}
primes[target*i] = false;//
}
for (int i = target + 1; ; i ++) {
if(i >= primes.length) {
stop = true;
break;
}
else if (primes[i]) {
target = i;
break;
}
}
cycles ++;
}
int sum = 0;
for (int i = 0; i < list.size(); i++) {
sum += list.get(i);;
}
Mon but est pas du tout vraiment trouver la réponse, mais plusieurs fois je l'ai abandonné mon code en raison de ces types d'erreurs. J'aimerais trouver une source pour eux.
Débordement entier. Je soupçonne que 'target * i' déborde. –
http://stackoverflow.com/questions/3001836/how-does-java-handle-integer-underflows-and-overflows-and-how-would-you-check-fo – assylias
À quelle ligne plante-t-il? Avez-vous essayé de déboguer votre code? – luk2302