※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 13241번 문제인 최소공배수이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/13241
13241번: 최소공배수
정수 B에 0보다 큰 정수인 N을 곱해 정수 A를 만들 수 있다면, A는 B의 배수이다. 예: 10은 5의 배수이다 (5*2 = 10) 10은 10의 배수이다(10*1 = 10) 6은 1의 배수이다(1*6 = 6) 20은 1, 2, 4,5,10,20의 배수이다. 다
www.acmicpc.net
두 양의 정수 x와 y의 최소공배수는 x * y / gcd(x,y)로 구할 수 있다. (단, gcd(x,y)는 최대공약수)
유클리드 알고리즘(Euclidean algorithm)을 이용해 두 정수의 최대공약수를 구해 문제를 해결하자.
문제의 답이 32비트 정수의 범위를 넘을 수 있다는 점에 유의하자.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
typedef long long ll;
ll gcd(ll x, ll y) {
if (y == 0) return x;
return gcd(y, x % y);
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
ll x, y; cin >> x >> y;
cout << x * y / gcd(x, y);
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 13218 // C++] Bitcoin (0) | 2023.05.27 |
---|---|
[BOJ 13217 // C++] Honey (0) | 2023.05.26 |
[BOJ 13245 // C++] Sum of digits (0) | 2023.05.24 |
[BOJ 13242 // C++] Harps and Tails (0) | 2023.05.23 |
[BOJ 2244 // C++] 민코프스키 합 (0) | 2023.05.22 |