[필수 문제] 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