-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsieve_of_eratosthenes.cpp
executable file
·50 lines (40 loc) · 2.24 KB
/
sieve_of_eratosthenes.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <vector>
using namespace std;
/* Данная программа реализует алгоритм под названием "решето Эратосфена", который находит все простые числа до введенного.
Это выполняется по следующему принципу: мы создаем массив логических переменных, изначально присваивая всем элементам true.
Он играет роль некой таблицы, где индекс является самим числом, а значение его "статусом". Далее запускаем цикл начиная от 2 и до
последнего элемента массива. Находим первое число, которое является "незачеркнутым" (имеет статус true) и "вычеркиваем" (присваиваем false)
все числа, которые кратны данному. На первой итерации таким числом будет 2, то есть вычеркнутся все четные числа. Далее переходим
к следующему незачеркнутому числу и вычеркиваем все числа, кратные ему и т.д. В конце необходим пройти по массиву и запомнить
индексы тех элементов, которые имеют значение true. Это и будут все простые числа в данном диапазоне. */
vector<int> factors_find(int number)
{
vector<bool> number_vals(number + 1);
vector<int> primes;
int i, j;
for(i = 2; i < number + 1; i++)
number_vals[i] = true;
for (i = 2; i < number + 1; i++)
{
if (number_vals[i] == true)
{
for(j = i * 2; j < number + 1; j += i)
number_vals[j] = false;
}
}
for (i = 2; i < number + 1; i++)
if(number_vals[i])
primes.push_back(i);
return primes;
}
int main()
{
int number, i;
cout<<"Enter the number"<<endl;
cin>>number;
vector<int> primes = factors_find(number);
for (i = 0; i < primes.size(); i++)
cout<<primes[i]<<" ";
return 0;
}