2013-12-09 3 views
2

Поскольку функция BitSet.get() использует аргумент int, я думал, могу ли я хранить более 2^32 бит в BitSet, и если да, то как бы я их извлечил?может java.util.BitSet содержать больше MAX_INT нет. бит?

Я делаю проект Эйлера, где мне нужно генерировать простые числа до 10^10. Алгоритм, который я использую для генерации простых чисел, - это сито Erathonesus, сохраняющее логические значения в битах в BitSet. Любое обходное решение для этого?

+0

Попробуйте использовать [BigInteger] (http://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html) с помощью «BigInteger.nextProbablePrime». Для меня это работает так, как я ожидаю. – n1ckolas

+0

Решетка Эратосфена не предназначена для нахождения больших простых чисел. Я бы порекомендовал другой подход. В записи Википедии предлагается псевдослучайное первичное сито. – Pace

ответ

3

Вы можете использовать список битов как List<BitSet>, и когда конец одного битового набора достигнут, вы можете перейти к следующему.

Однако, я думаю, что ваш подход, вероятно, неверен. Даже если вы используете один бит для каждого номера, вам нужны 10^10 бит, который составляет около 1 GB памяти (8 бит в байтах и ​​1024^3 байта в ГБ). Большинство проблем Project Euler должны быть разрешимы, не требуя такой большой памяти.

+0

Я делаю проблему «Primes With Runs», нет. 111. Мне, вероятно, нужен лучший генератор. Спасибо, в любом случае. – udiboy1209

 Смежные вопросы

  • Нет связанных вопросов^_^