algorithm/BOJ
BOJ 2609번 - 유클리드 호제법
_JunHo
2020. 1. 12. 22:29
BOJ : https://www.acmicpc.net/problem/2609
2609번: 최대공약수와 최소공배수
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를,둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
www.acmicpc.net
최대공약수와 최소공배수를 계산하기 전 좀더 쉽게 접근하는 방법을 소개하려고 한다.
호제법이란 말은 두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 알고리즘을 나타낸다.
2개의 자연수 a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a>b),
a와 b의 최대공약수는 b와 r의 최대공약수와 같다.
이 성질에 따라, b를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여
나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다.
이 호제법을 이용하면 최대공약수와 최소공배수를 쉽게 구할 수 있다.
* 최소공배수는 두 수를 각각 최대공약수로 나눈 값 * 최대공약수 가 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include <iostream>
using namespace std;
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}
int main() {
int a, b, c;
cin >> a >> b;
if (a >= b) c = gcd(a, b);
else c = gcd(b, a);
cout << c << endl;
cout << (a / c) * (b / c) * c;
return 0;
}
|