풀이
gcd와 lcm을 알고 있으면 되는 문제다.
최소공배수는 주어진 정수 a, b에서 lcm(a, b) = a * b / gcd(a, b)이다.
최대공약수는 유클리드 호제법을 사용하면 된다.
정수 m, n(m > n)이 주어질 때 gcd(m, n)은
1 2 3 4 | long long int gcd(long long int a, long long int b) { return b ? gcd(b, a % b) : a; } |
다음과 같이 구현할 수 있다. 자세한 내용과 증명 과정은 링크를 참고하면 된다.
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <cstdio> long long int gcd(long long int a, long long int b) { return b ? gcd(b, a % b) : a; } long long int lcm(long long int a, long long int b) { return (a * b) / gcd(a, b); } int main() { long long int a, b; scanf("%lld %lld", &a, &b); long long ans = lcm(a, b); printf("%lld", ans); return 0; } |
'온라인저지' 카테고리의 다른 글
[BOJ] 14867번: 물통 (0) | 2018.04.09 |
---|---|
[BOJ] 14697번: 방 배정하기 (0) | 2018.04.09 |
[BOJ] 14696번: 딱지놀이 (0) | 2018.04.09 |
[BOJ] 11728번: 배열 합치기 (0) | 2018.03.29 |
[BOJ] 13866번: 팀 나누기 (0) | 2018.03.28 |
[BOJ] 1912번: 연속합 (0) | 2018.03.28 |
댓글