Я сделал простую решетку программы erastothenes для вычисления суммы простых чисел до n для эйлера проекта. Он отлично работает на 100, 1000, 10000 и так далее, но когда я делаю 1 или 2 миллиона, это дает мне это:Ошибка при поиске больших простых чисел
java.lang.ArrayIndexOutOfBoundsException: -2146737495
Это не происходит при меньших чисел, я использую логические массивы.
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);;
}
Моя цель не совсем реально, чтобы найти ответ, но я много раз отказался от моего кода из-за этих типов ошибок. Я бы хотел найти источник для них.
Целочисленное переполнение. Я подозреваю, что «target * i' переполняется. –
http://stackoverflow.com/questions/3001836/how-does-java-handle-integer-underflows-and-overflows-and-how-would-you-check-fo – assylias
На какой линии он падает? Вы пробовали отлаживать свой код? – luk2302