![](http://i1.daumcdn.net/thumb/R800x800/?fname=https://blog.kakaocdn.net/dn/cDTG10/btqOYtMM8EZ/iwmccoXDLr4jHkBt3WpiRK/img.png)
목차
2609번: 최대공약수와 최소공배수
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
www.acmicpc.net
코드
#include <iostream>
using namespace std;
//최대공약수
int GCD(int n, int m){
if(n % m == 0) return m;
return GCD(m, n % m);}
int main() {
int n, m; cin >> n >> m;
cout << GCD(n, m) << endl << n * m / GCD(n, m);
}
풀이
정직한 제목에 정직한 풀이입니다.
최대공약수를 구하고 최소공배수를 구하면 됩니다. 물론 이 둘을 구하는 방법에는 다양한 방법이 있겠지만
저 같은 경우에는 유클리드 호제법을 사용했습니다.
ko.wikipedia.org/wiki/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C_%ED%98%B8%EC%A0%9C%EB%B2%95
유클리드 호제법 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 유클리드 호제법(-互除法, Euclidean algorithm) 또는 유클리드 알고리즘은 2개의 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란
ko.wikipedia.org
자세한 알고리즘에 대한 설명은 위키를 참고 해 주시길 바랍니다.
크게 어려운 알고리즘은 아닙니다. 두 수가 서로를 나누어서 최대공약수를 구하는 방법인데요,
어찌됐든 유클리드 호제법을 사용해서 최대공약수를 구한다면 이를 통해 최소공배수도 바로 구할 수 있습니다.
최소 공약수는 두 수의 곱을 최대공약수로 나눈 값입니다.
따라서 위의 코드와 같이 최대공약수를 구하는 함수를 작성하시면 최소공약수는 바로 구할 수 있습니다.
'공부 > 백준' 카테고리의 다른 글
백준 9655번: 돌 게임(C++) (0) | 2020.12.04 |
---|---|
백준 1158번: 요세푸스 문제(C++) (0) | 2020.12.03 |
백준 1110번: 더하기 사이클(C++) (0) | 2020.12.01 |
백준 1977번: 완전제곱수(C++) (0) | 2020.11.30 |
백준 1075번: 나누기(C++) (0) | 2020.11.29 |