Я пытаюсь создать программу, которая генерирует все кратные простых чисел в заданном диапазоне.Однако я сталкиваюсь с программой для больших чисел.
boolean[] array = new boolean[25000];
for(int k = 2; k <= n; k++){
if(isPrime(k)){
//int p = k;
for(int i = 0; i < 1000000; i++){
if(i*k <= n){
System.out.println("k: "+k+" i: "+i + " k*i: " + (i*k ));
array[i*k] ^= true;
}
}
}
}
Этот код генерирует и печатает все кратные числа простых чисел в заданном диапазоне пользователем.В моем тесте я использую n = 25000
protected boolean isPrime(int number){
if (number == 2 || number == 3) return true;
//check if n is a multiple of 2
if (number%2==0) return false;
//if not, then just check the odds
for(int i=3;i*i<=number;i+=2) {
if(number%i==0)
return false;
}
return true;
}
Это моя функция, которая проверяет, является ли число простым числом.
Вот краткий вывод из последних нескольких строк, когда n =25000
k: 2153 i: 3 k*i: 6459
k: 2153 i: 4 k*i: 8612
k: 2153 i: 5 k*i: 10765
k: 2153 i: 6 k*i: 12918
k: 2153 i: 7 k*i: 15071
k: 2153 i: 8 k*i: 17224
k: 2153 i: 9 k*i: 19377
k: 2153 i: 10 k*i: 21530
k: 2153 i: 11 k*i: 23683
k: 2153 i: 997438 k*i: -2147483282
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -2147483282
Я не могу найти решение (или код, который делает его ошибочным) в последнем поколении.После k = 2153 и i = 11 следующим числом будет k = 2153 (это нормально), но я перехожу к 997438. Я не могу найти то, что заставляет его идти так высоко.Любые идеи приветствуются.