백준 17103 c++
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int input(int lower, int upper);
void input_test_case(vector <int>& vi, int size);
void goldbach(vector <int>& vi);
void make_eratosthenes(int* array, int num);
int find_nums_prime_make_target(int num, int* eratostenes);
void print_result(vector <int> vi);
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int T;
vector <int> test_case;
T = input(1, 100);
input_test_case(test_case, T);
goldbach(test_case);
print_result(test_case);
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_test_case(vector <int> &vi, int size)
{
//cout << "input_test_case" << endl;
int i, N;
for (i = 0; i < size; i++)
{
N = input(3, 1000000);
if (N % 2 == 0)
{
vi.push_back(N);
}
else
{
i--;
}
}
}
void goldbach(vector <int> &vi)
{
//cout << "goldbach" << endl;
vector <int> temp;
vector <int> prime;
int* eratostenes;
int i;
temp = vi;
sort(temp.begin(), temp.end());
eratostenes = new int[temp.back() + 1] { 0 };
make_eratosthenes(eratostenes, temp.back());
for (i = 0; i < vi.size(); i++)
{
vi[i] = find_nums_prime_make_target(vi[i], eratostenes);
}
delete[] eratostenes;
return;
}
void make_eratosthenes(int *array, int num)
{
//cout << "make_eratosthenes" << endl;
int B = num;
int i, j;
for (i = 2; i <= B; i++)
{
array[i] = i;
}
for (i = 2; i * i <= B; i++)
{
if (array[i] == i)
{
for (j = i * i; j <= B; j = j + i)
{
array[j] = 0;
}
}
else
{
;
}
}
return;
}
int find_nums_prime_make_target(int num, int* eratostenes)
{
//cout << "find_nums_prime_make_target" << endl;
int count = 0;
int i;
for (i = 1; i < num; i++)
{
if (eratostenes[i] + eratostenes[num - i] == num)
{
count++;
if (eratostenes[i] == eratostenes[num - i])
{
count++;
}
else
{
;
}
}
else
{
;
}
}
return count / 2;
}
void print_result(vector <int> vi)
{
//cout << "print_result" << endl;
int i;
for (i = 0; i < vi.size(); i++)
{
cout << vi[i] << "\n";
}
return;
}