add find prime

This commit is contained in:
2025-10-23 07:30:21 +03:00
parent b806a9b58a
commit c2c8a5fd0c

View File

@@ -0,0 +1,30 @@
#pragma once
#include <vector>
// находит все простые числа от 0 до n
namespace alg
{
inline std::vector<int> find_primes(int n)
{
std::vector<int> r;
std::vector<bool> is_prime(n + 1, true);
// 0 и 1 не являются простыми числами
is_prime[0] = is_prime[1] = false;
// Исключаем все чётные числа, кроме 2
for (int i = 4; i <= n; i += 2) is_prime[i] = false;
// Перебираем только нечётные числа, начиная с 3
for (int p = 3; p * p <= n; p += 2)
if (is_prime[p])
for (int i = p * p; i <= n; i += 2 * p) is_prime[i] = false;
for (int p = 3; p <= n; p += 2)
if (is_prime[p]) r.push_back(p);
return r;
}
}