백준 4948 c++
#include <iostream>
#include <vector>
using namespace std;
int input(int lower, int upper);
void input_numbers(vector <int>& vi);
void check_prime_Bertrand(vector <int>& vi);
int find_nums_prime_eratosthenes(int num);
void print_result(vector <int> vi);
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
vector <int> num_list;
input_numbers(num_list);
check_prime_Bertrand(num_list);
print_result(num_list);
return 0;
}
int input(int lower, int upper)
{
//cout << "input" << endl;
int A;
while (1)
{
cin >> A;
if (A >= lower && A <= upper)
{
break;
}
else
{
;
}
}
return A;
}
void input_numbers(vector <int> &vi)
{
//cout << "input_numbers" << endl;
int temp;
while (1)
{
temp = input(0, 123456);
if (temp == 0)
{
break;
}
else
{
vi.push_back(temp);
}
}
return;
}
void check_prime_Bertrand(vector <int>& vi)
{
//cout << "check_prime_Bertrand" << endl;
int i;
for (i = 0; i < vi.size(); i++)
{
vi[i] = find_nums_prime_eratosthenes(vi[i]);
}
return;
}
int find_nums_prime_eratosthenes(int num)
{
//cout << "find_prime_eratosthenes" << endl;
int A = num, B = num*2;
int count = 0;
int i, j;
bool* eratostenes;
eratostenes = new bool[B + 1] {false};
for (i = 2; i <= B; i++)
{
eratostenes[i] = true;
}
for (i = 2; i * i <= B; i++)
{
if (eratostenes[i] == true)
{
for (j = i * i; j <= B; j = j + i)
{
eratostenes[j] = false;
}
}
else
{
;
}
}
for (i = 1; i <= B; i++)
{
if (eratostenes[i] == true && i > A && i <= B)
{
count++;
}
else
{
;
}
}
delete[] eratostenes;
return count;
}
void print_result(vector <int> vi)
{
//cout << "print_result" << endl;
int i;
for (i = 0; i < vi.size(); i++)
{
cout << vi[i] << "\n";
}
return;
}