본문 바로가기
백준/C++

백준 2609번 : 최대공약수와 최소공배수 [C++]

by 대니스 2022. 8. 4.

주소 : https://www.acmicpc.net/problem/2609

 

2609번: 최대공약수와 최소공배수

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

www.acmicpc.net

소스 코드 :

#define _CRT_SECURE_NO_WARNINGS
#include <iostream> 
using namespace std;

int max1(int a, int b)
{
	int max = 0;
	if (a == b)
		max = a;
	else 
	{
		for (int i = 1;i < 10000;i++)
		{
				if (a % i == 0 && b % i == 0)
						max = i;
		}
	}
	return max;
}

int min1(int a, int b,int max)
{
	int min = 0;
	if (a == b)
		min = a;
	else
	min = max * (a / max) * (b / max);
	return min;
}

int main()
{
	int a, b = 0;
	int temp = 0;
	int max, min = 0;
	cin >> a >> b;
	
	if (a < b)
	{
		temp = a;
		a = b;
		b = temp;
	}

	if (a == 1 || b == 1)
	{
		max = 1;
		min = a * b;
	}

	else
	{
		max = max1(a, b);
		min = min1(a, b, max);
	}
	
	cout << max << endl << min;
	return 0;
}


마무리 : 최대공약수는 입력된 두 수가 나누어 떨어짐과 동시에 큰 수이어야하고 최소공배수는 최대공약수를 이용하여 입력된 두 수가 최대공약수를 나눌 때 나오는 몫과 최대공약수를 곱하면 된다. 수학 문제이기 때문에 어려운 문제는 아니다.