백준

[2609] 최대공약수와 최소공배수 (JAVA)

댈팽이 2024. 4. 4. 20:28
728x90

# 문제 설명

두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.


입력

첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.


출력

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

 

# 정답 코드

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        StringBuilder sb = new StringBuilder();

        int n1 = Integer.parseInt(st.nextToken());
        int n2 = Integer.parseInt(st.nextToken());

        int gcd = GCD(n1, n2);
        sb.append(gcd + "\n");

        //최소 공배수 = 두 수의 곱 / 최대공약수
        sb.append(n1 * n2 / gcd);

        System.out.print(sb);
    }

    //최대 공약수
    public static int GCD(int a, int b) {
        int big = Math.max(a, b);
        int small = Math.min(a, b);
        int result = 0;

        while (true) {
            result = big % small;

            if (result == 0) {
                return small;
            }

            big = small;
            small = result;
        }
    }
}

 

유클리드 호제법으로 최대 공약수를 구했다.

a와 b 중 큰 숫자를 big에, 작은 숫자를 small에 저장한다.

% 연산 결과값을 저장할 result를 만든다.

 

big % small의 결과값을 result에 저장한다.

만약 result가 0이면, 마지막 계산 식에서 작은 수를 리턴한다.

big은 small로, small은 result로 설정하고 위 과정을 반복하여 최대 공약수를 구한다.

 

최소 공배수는 두 수의 곱을 최대 공약수로 나누면 구할 수 있다.

728x90