본문 바로가기
백준

[1934] 최소공배수

by kmyobin 2022. 8. 19.


유클리드 호제법 : 2개의 수의 최대공약수를 구하는 알고리즘

- 호제법 : 두 수가 서로 상대방 수를 나누어 원하는 수를 얻는 알고리즘

 

2개의 자연수 A, B ( A > B )에 대해 A%B = R로 놓는다면 A와 B의 최대공약수는 B와 R의 최대공약수와 같다

A = 24, B = 18이라고 놓았을 때 A%B = 6. 즉 R = 6이다

그 다음 B%R을 반복하여 진행하면 나머지가 0이되는 순간이 온다

그 나누는 수가 A와 B의 최대공약수이다

 

아래는 예시이다


유클리드 호제법을 이용하여 최대공약수를 구했으면 최소공배수는 R * (A / R) * (B / R)이다

전체 코드는 아래와 같다

#include <iostream>
using namespace std;

int T, A, B;
int R;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	cin >> T;

	for (int i = 0; i < T; i++)
	{
		cin >> A >> B;
		int big, small;
		if (A > B) { big = A; small = B; }
		else { big = B; small = A; }
		while (1) {
			R = big % small;
			if (R == 0) {
				R = small;
				break;
			}
			big = small; small = R;
		}
		printf("%d\n", R * (A / R) * (B / R));
	}
}

'백준' 카테고리의 다른 글

[3036] 링  (0) 2022.08.25
[2981] 검문  (0) 2022.08.19
[1358] 하키  (0) 2022.08.12
[1004] 어린 왕자  (0) 2022.08.12
[2477] 참외밭  (0) 2022.08.12

댓글