Странная генерация номера Java - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь создать программу, которая генерирует все кратные простых чисел в заданном диапазоне.Однако я сталкиваюсь с программой для больших чисел.

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. Я не могу найти то, что заставляет его идти так высоко.Любые идеи приветствуются.

...