Соревнование
Внедрите сито Sundaram для поиска простых чисел ниже n. Возьмите входное целое число nи выведите простые числа ниже n. Можно предположить, что nвсегда будет меньше или равен одному миллиону.
Сито
Начните со списка целых чисел от
1доn.Удалите все числа в форме
i + j + 2ijгде:iиjменьше чемn.jвсегда больше или равноi, что больше или равно1.
i + j + 2ijменьше или равноn
Умножьте оставшиеся числа на
2и добавьте1.
Это даст все простые числа (кроме тех 2, которые должны быть включены в ваш вывод) меньше, чем 2n + 2.
Вот анимация сита, используемого для поиска простых чисел ниже 202.

Выход
Ваш вывод должен быть каждым простым целым числом ≤ n(в порядке возрастания), за которым следует новая строка:
2
3
5
Где nнаходится 5.
Примеры
> 10
2
3
5
7
> 30
2
3
5
7
11
13
17
19
23
29
Входы обозначены >.
(i,j)с i<=j, но результат не меняется, если мы игнорируем это требование. Можем ли мы сделать это, чтобы сохранить байты?
i <= j. Это только часть того, как работает сито. Так что да, вы можете не указывать i <= jв своем коде. @xnor
2n+1), которые не имеют формы 2(i + j + 2ij)+1- можем ли мы проверить это свойство непосредственно на потенциальных простых числах или наш код должен выполнить времена 2 плюс 1 в какой-то момент ?
nво всем этом. В описании метода говорится, что он сгенерирует все простые числа до 2 * n + 2. Но в описании ввода / вывода говорится, что вход есть n, а выходные данные все простые n. Так нужно ли применять метод для генерации всех простых чисел до 2 * n + 2, а затем отбрасывать те, которые больше, чем nдля выходных данных? Или мы должны рассчитать nв описании метода из ввода n?
n=30отсутствующим 29 в выводе.