문제설명
소스코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int T = in.nextInt();
for(int i = 0; i < T; i++) {
int a = in.nextInt();
int b = in.nextInt();
System.out.println(a * b / gcd(a, b));
}
}
public static int gcd(int a, int b)
{
if(b == 0) return a;
else return gcd(b, a % b);
}
}
설명
- 최소공배수와 최대공약수와의 관계는 아래와 같다.
두 자연수의 곱 = 최대공약수 × 최소공배수
최소공배수 = 두 자연수의 곱 / 최대공약수 - 유클리드 호제법으로 최대공약수를 구한다(재귀 이용)
유클리드 호제법
위 알고리즘은 유클리드 호제법을 이용한 것이다.
두 정수를 직사각형의 두 변의 길이라고 생각하면 두 정수의 최대공약수를 구하는 문제는
직사각형을 정사각형으로 완전히 채우고 이렇게 만들 수 있는 정사각형의 가장 긴 변의 길이를 구하면 된다.
1.짧은 변의 길이를 한 번으로 하는 정사각형으로 채운다.
2.남은 직사각형에 대해 같은 작업을 반복
3.정사각형만으로 구성되었을 때의 변의길이가 최대공약수
'자료구조 & 알고리즘 > BOJ' 카테고리의 다른 글
[Java] 백준 15단계 - 1735번 문제 (분수 합) (0) | 2023.07.26 |
---|---|
[Java] 백준 15단계 - 13241번 문제 (최소공배수) (0) | 2023.07.26 |
[C++] 백준 14단계 - 11478번 문제 (서로 다른 부분 문자열의 개수) (0) | 2023.07.24 |
[C++] 백준 14단계 - 1269번 문제 (대칭 차집합) (0) | 2023.07.24 |
[C++] 백준 14단계 1764번 문제 (듣보잡) (0) | 2023.07.23 |