Files
ARPZ-s1-pr2/sieveoferatosthenes.cpp
2024-10-26 09:11:25 +03:00

50 lines
990 B
C++

/*
* Реализация решета Эратосфена
*/
#include <iostream>
#include <vector>
#include <map>
// Решето Эратосфена
std::vector<int> sieveOfEratosthenes(int n)
{
// 1. Выписываем подряд все числа от 2 до n
std::vector<int> prime;
for (int i = 2; i <= n; i++)
{
prime.push_back(i);
}
// 2. Пусть переменная p равна первому простому числу в массиве.
int p = prime[0];
// 3. Зачеркиваем числа, кратные p
step_3:
for (int i = 0; i < prime.size(); i++)
{
if (prime[i] == p)
{
continue;
}
if (prime[i] % p == 0)
{
prime.erase(prime.begin() + i);
i--;
}
}
// 4. Найти первое не зачеркнутое число больше p
for (int i = 0; i < prime.size(); i++)
{
if (prime[i] > p)
{
p = prime[i];
goto step_3;
}
}
return prime;
}