알고리즘/알고리즘
[기본 알고리즘] 최대공약수(GCD), 최소공배수(LCM) 구하기
be-lgreen
2021. 10. 4. 22:00
https://www.acmicpc.net/problem/2609
2609번: 최대공약수와 최소공배수
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
www.acmicpc.net
문제풀이
최대공약수(GCD) - Greatest Common Divisor
두 자연수가 갖는 약수 중, 공통된 가장 큰 약수를 말한다.
최소공배수(LCM) - Least Common Multiple
두 자연수의 배수들 중, 공통된 가장 작은수를 말한다.
최소 공배수 = 두 자연수의 곱 / 최대 공약수
문제풀이1)
#include <iostream>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, m;
cin >> n;
cin >> m;
int answer1, answer2;
for (int i = 1; i <= n; i++)
{
if (n % i == 0)
{
if (m % i == 0)
{
answer1 = i;
}
}
}
int dd = 1;
int n2;
while (1)
{
n2 = n * dd;
if (n2 % m == 0)
{
answer2 = n2;
break;
}
dd += 1;
}
cout << answer1 << "\n";
cout << answer2 << "\n";
// return 최대공약수 최소공배수
// return answer1 answer2
}
문제풀이2) (최소 공배수 = 두 자연수의 곱 / 최대 공약수 공식을 이용)
#include <iostream>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, m;
cin >> n;
cin >> m;
int answer1, answer2;
for (int i = 1; i <= n; i++)
{
if (n % i == 0)
{
if (m % i == 0)
{
answer1 = i;
}
}
}
answer2 = n * m / answer1;
cout << answer1 << "\n";
cout << answer2 << "\n";
// return 최대공약수 최소공배수
}