Для библиотеки мне нужно сохранить первые числа простых чисел до предела L. Эта коллекция должна иметь время поиска O (1) (чтобы проверить, является ли число простым или нет), и это должно быть легко, учитывая число, чтобы найти следующее простое число (при условии, что оно меньше L).
Учитывая, что L фиксировано, сито Eratostene для генерации списка отлично. Прямо сейчас я использую упакованный булевский массив для хранения списка, который содержит только записи для нечетных чисел между 3 и L (включительно). Это занимает (L-2)/2 бит памяти. Я хотел бы иметь возможность статически увеличивать L, не используя больше памяти.
Есть ли структура данных, использующая меньше памяти со схожими свойствами? Или, по крайней мере, с постоянным временем поиска? (нечетные числа затем могут быть перечислены до тех пор, пока мы не получим простое)
(язык, на котором я написал это, Factor, но этот вопрос будет таким же на любом языке, который имеет встроенный или простой программируемые упакованные битовые массивы)