백준 4948 c++

magicdrill·2024년 3월 18일
0

백준 문제풀이

목록 보기
168/654

백준 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;
}

0개의 댓글