Для библиотеки мне нужно сохранить первые числа простых чисел до предела L. Эта коллекция должна иметь время поиска O (1) (чтобы проверить, является ли число простым или нет), и оно должно быть легким, учитывая число, чтобы найти следующее простое число (при условии, что оно меньше L).Эффективное хранение простых чисел
Учитывая, что L фиксирован, сито Eratostene для создания списка в порядке. Прямо сейчас я использую упакованный булевский массив для хранения списка, который содержит только записи для нечетных чисел между 3 и L (включительно). Это занимает (L-2)/2 бит памяти. Я хотел бы иметь возможность статически увеличивать L, не используя больше памяти.
Есть ли структура данных, использующая меньше памяти с аналогичными свойствами? Или, по крайней мере, с постоянным временем поиска? (Нечетные числа могут быть перечислены, пока мы не получим простые)
(язык я писал в это Factor, но этот вопрос будет таким же на любом языке, который имеет встроенный или легко программируемые упакованные битовые массивы)
Что такое типичный «L»? Это для встроенного устройства, где память плотная? Это может повлиять на рекомендации. Учитывая, что существует 50 847 534 простых числа под миллиардом, вы можете потратить больше времени на упаковку/распаковку, а затем на прямой массив из 4 байтовых целых чисел. –
L на сегодняшний день составляет 5 000 000. –
И я бы не хотел, чтобы у меня было больше, чем память размером ~ 320 КБ. –