First commit
This commit is contained in:
49
sieveoferatosthenes.cpp
Normal file
49
sieveoferatosthenes.cpp
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Реализация решета Эратосфена
|
||||
*/
|
||||
|
||||
#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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user