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
입력된 두 수의 최소공배수를 구하는 문제이다.
두 수 a, b에 대해 최대공약수 * 최소공배수 = a * b가 성립함을 이용했다.
최대공약수는 유클리드 호제법을 이용하여 구할 수 있다.
(스테인 알고리즘도 있다고 한다)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long a = sc.nextLong();
long b = sc.nextLong();
long L = a * b / GCD(a, b);
System.out.print(L);
}
private static long GCD(long a, long b) {
if (a >= b) {
long r = a % b;
if (r == 0) return b;
else return GCD(r, b);
} else return GCD(b, a);
}
}
유클리드 호제법은 a와 b의 최대공약수는 a를 b로 나눈 나머지인 r과 b의 최대공약수와 같음을 이용한 방법이다.
최대공약수를 구하는 GCD를 재귀를 통해 만들었다.
'BOJ' 카테고리의 다른 글
[BOJ] [JAVA] 1016번 제곱 ㄴㄴ 수 (2) | 2024.01.11 |
---|---|
[BOJ] [JAVA] 11866번 요세푸스 문제0 (0) | 2024.01.10 |
[BOJ] [JAVA] 9012번 괄호 (1) | 2024.01.07 |
[BOJ] [JAVA] 4134번 다음 소수 (0) | 2024.01.07 |
[BOJ] [JAVA] 10816번 숫자 카드 2 (0) | 2024.01.06 |
[BOJ] [JAVA] 7785번 회사에 있는 사람 (0) | 2024.01.06 |
[BOJ] [JAVA] 18870번 좌표 압축 (2) | 2024.01.06 |
[BOJ] [JAVA] 10815번 숫자 카드 (1) | 2024.01.06 |