Я написал версию Решета Эратосфена для Проекта Эйлера, который одновременно работал над кусками пространства поиска. Он обрабатывает первые 1M целых чисел (например), но сохраняет каждое простое число, которое он находит в таблице. После того, как вы перебрали все найденные простые числа, массив переинициализируется, и найденные простые числа уже используются для маркировки массива перед поиском следующего.
Таблица отображает простое число в его «смещение» от начала массива для следующей итерации обработки.
По своей концепции (если не в реализации) это похоже на то, как функциональные языки программирования выполняют ленивую оценку списков (хотя и в более крупных шагах). Выделение всей памяти заранее не требуется, поскольку вас интересуют только те части массива, которые проходят тест на простоту. Хранение не простых чисел, висящих вокруг вас, бесполезно.
Этот метод также обеспечивает запоминание для последующих итераций по простым числам. Это быстрее, чем сканировать структуру данных разреженного сита, каждый раз ища их.