add find prime
This commit is contained in:
30
src/numbers/find_primes.hpp
Normal file
30
src/numbers/find_primes.hpp
Normal 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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user