Algorithm/Mathmatics

[Java] 백준(Baekjoon) 2609. 최대공약수와 최소공배수

_dear 2024. 1. 22. 15:57

 

https://www.acmicpc.net/problem/2609

 

최대공약수와 최소공배수

 

 

 
시간 제한        메모리 제한                  제출                          정답                       맞힌 사람               정답 비율
1 초 128 MB 105985 61134 49744 57.880%

 

문제

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

 

입력

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

 

출력

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

 

예제 입력 1 

24 18

 

예제 출력 1 

6
72

 

 

 

 


 

풀이

* 유클리드 호제법

: 두 수 , 

이 때 r은 (0 ≤ r < b) 이고, a ≥ b 이다.

 

이 때 a 와 b의 최대공약수를 (a, b)라고 할 때 (a, b)의 최대공약수는 (b, r)의 최대공약수와 같다.

 

GCD(a, b) = GCD(b, r)

 

 

* 참조

https://st-lab.tistory.com/154

 

import java.util.Scanner;
 
public class Main {
 
	public static void main(String[] args) {
 
		Scanner sc = new Scanner(System.in);
		
		int a = sc.nextInt();
		int b = sc.nextInt();
 
		int d = gcd(a, b);	// 최대공약수
 
		System.out.println(d);
		System.out.println(a * b / d);
 
	}
 
	// 최대공약수 재귀 방식
	public static int gcd(int a, int b) {
		if (b == 0)
			return a;
            
		// GCD(a, b) = GCD(b, r)이므로 (r = a % b)
		return gcd(b, a % b);
	}
}