Решето Эратосфена
Напомним, что простыми числами называют такие числа, которые не имеют делителей, кроме 1 и самого себя. Так, простыми числами являются: \(2,3,5,7,11...\) Все остальные числа можно представить в виде произведения простых чисел: \(24 = 2 * 2 * 2 * 3\).
Решето Эратосфена - алгоритм, позволяющий найти все простые числа от 1 до \(N\) за \(O(n \log \log n)\). Данный метод (просеивания) впервые был предложен Эратосфеном Киренским в III веке до нашей эры.
Сам алгоритм достаточно тривиален: будем перебирать числа по возрастанию, начиная с 2, зачёркивая все числа, кратные текущему. Например, при обработке числа 2 будут зачёркнуты числа 4,6,8,…. Если мы обнаружили незачёркнутое число, это значит, что оно простое.
Работу решета можно значительно ускорить, если начинать зачёркивать числа, кратные \(p\), не с \(2p\), а с \(p^2\). Ведь числа \(2p,3p,5p,…\) уже были зачёркнуты при обработке чисел \(2,3,5,…\).
Пусть n - это наше ограничение по поиску простых чисел, мы объявляем его заранее как константу. Также мы создаем 2 вектора - resheto, собственно где мы храним решето, и primes, куда мы будем заносить простые числа. Далее начинаем обход решета - если текущее значение отлично от 0, то число простое, и мы заносим его в primes.