Вы не можете. Массив Java может содержать не более 2^31 - 1
элементов, поскольку size
массива должен помещаться в 32-разрядное целое число со знаком.
Это применимо, работаете ли вы на 32-битной или 64-битной JVM.
Я подозреваю, что вы что-то упустили в своей домашней работе. Требуется ли найти все простые числа меньше 2^32
или что-то еще? Если это так, они ожидают, что вы будете обрабатывать каждый int
из int[]
как массив из 32 битов. И для этого нужен массив всего 2^25
целых ... если моя арифметика верна.
A BitSet
- еще одна хорошая альтернатива.
A LinkedList<Integer>
- плохая альтернатива. Он использует примерно в 8 раз больше памяти, чем массив того же размера, и производительность get(int)
будет ужасно медленной для длинного списка ... при условии, что вы используете его очевидным образом.
Если вы хотите что-то, что может эффективно использовать столько памяти, сколько вы можете сконфигурировать для своей JVM, то вы должны использовать int[][]
, то есть массив массивов целых чисел, с экземплярами int[]
, равными вашему размеру. могу сделать их.
Мне нужно найти номера факторов от 2 до 2 ^ 63-1, используя сито, и сито должно иметь информацию о том, что P [n] = наименьшее простое число с делением n. Я знаю, что с ситом я могу вывести число до 2 ^ 52. Но как это делать, держась за содержание?
Я не совсем уверен, что понимаю вас. Чтобы разложить число в области 2 ^ 64, вам нужно только простые числа до 2 ^ 32 ... не 2 ^ 52. (Корень квадратный из 2 ^ 64 равен 2 ^ 32, и непростое число должно иметь простой множитель, который меньше или равен его квадратному корню.)
Звучит так, будто вы пытаетесь просеять больше чисел, чем нужно.