728x90
문제
두 수 a와 b가 주어졌을 때, a와 b의 최소 공배수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 n이 주어진다. 다음 n개 줄에는 a와 b가 주어진다. a와 b사이에는 공백이 하나 이상 있다. 두 수는 백만보다 작거나 같은 자연수이다.
출력
각 테스트 케이스에 대해서 입력으로 주어진 두 수의 최소공배수를 출력한다.
풀이
유클리드 호제법을 이용하여 최대공약수를 계산하여 준다.
최대 공약수가 있다면 최소공약수는 "주어지는 값1 * 주어지는 값2 / 최대공약수"이다
위의 공식을 사용할때 최대공약수가 존재하지 않는다면 Division by Zero가 발생하기에 최대공약수를 1로 만들어준다.
코드
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
for(int i=0;i<n;i++) {
long a=sc.nextLong(), b=sc.nextLong();
long c=gcd(a,b);
if(c==0) // 최대 공약수가 존재하지 않으면 0으로 되고 값은 0으로 나눌수 없기에 1을 대입
c=1;
System.out.println(a*b/c);
}
}
public static long gcd(long a, long b) { // 최대공약수 계산
if(a<b) {
long t=a;
a=b;
b=t;
}
while(b>0) { // 유클리드 호제법을 이용하여 최대공약수를 계산
a=a%b;
if(a<b) {
long t=a;
a=b;
b=t;
}
}
return a;
}
}
728x90
728x90
'Algorithm > Baekjoon' 카테고리의 다른 글
Baekjoon 23881 알고리즘 수업 - 선택 정렬 1 JAVA (0) | 2022.09.28 |
---|---|
Baekjoon 5893 17배 JAVA (0) | 2022.09.20 |
Baekjoon 21774 가희와 로그 파일 JAVA (0) | 2022.09.18 |
Baekjoon 19638 센티와 마법의 뿅망치 JAVA (0) | 2022.09.18 |
Baekjoon 22233 가희와 키워드 JAVA (0) | 2022.09.16 |
댓글