[필수 문제] GCD LCM
2021. 2. 12. 00:34ㆍ코딩 테스트/필수 문제
1. 문제
두 개의 자연수를 입력받아 최대공약수(GCD)와 최소공배수(LCM)를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000 이하의 자연수이며 사이에 한 칸의 공백이 주어진다.
출력
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소공배수를 출력한다.
예제 입력
24 18
예제 출력
6
72
2. 풀이
이 문제는 유클리드 호제법으로 해결할 수 있다.
유클리드 호제법은 2개의 자연수 a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면 (단 a>b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이 성질에 따라, b를 r로 나눈 나머지 r0를 구하고, 다시 r을 r0로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다. 최소공배수는 a, b의 곱을 최대공약수로 나는 값이다.
import java.io.*;
import java.util.StringTokenizer;
public class Main {
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int g = gcd(n, m);
int l = (n * m) / g;
bw.write(g + "\n" + l);
br.close();
bw.flush();
bw.close();
}
private static int gcd(int n, int m) {
if(n < m) {
int tmp = n;
n = m;
m = tmp;
}
return m == 0 ? n : gcd(m, n % m);
}
}
728x90
'코딩 테스트 > 필수 문제' 카테고리의 다른 글
[필수 문제] rook (0) | 2021.02.12 |
---|---|
[필수 문제] maxofarr (0) | 2021.02.12 |
[필수 문제] 상자 꾸미기 (0) | 2021.02.12 |
[필수 문제] offset (0) | 2021.02.11 |