백준/유클리드 호제법

2609 최대공약수와 최소공배수

have a good time 2022. 6. 26. 19:21

 

 

1. 유클리드 호제법 설명

 

 

1) 최대공약수 : GCD

 

 

a, b : 정수

r = a mod b     (즉, a에 b를 나눈 나머지)

이때  0 ≤ r < b 이며, b ≤ a 이다.

 

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

 

즉, a와 b의 최대공약수 = b와 r의 최대공약수

 

 

예제에 나온 24, 18 에 대해서 최대공약수를 구해보자

 

단계 1

 

a = 24, b = 18

=> r= 6

 

GCD(24,18) = GCD(18,6)

 

단계 2

 

a = 18, b = 6

=> r = 0

 

r 이 0보다 크거나 같아야 하므로

여기서 멈춘다.

 

r= 0 이라는 뜻은,

18을 6으로 나눈 나머지가 0이라는 것이다.

즉, 18이 6으로 나누어 떨어진다는 것이다.

때문에 6이 18과 6의 최대공약수가 된다.

 

GCD(18,6) = GCD(6,0) = 6

 

단계 3

 

위의 과정을 정리하면

 

GCD(24,18) = GCD(18,6) = GCD(6,0) = 6

 

즉 24와 18의 최대공약수는 6이 된다.

 

 

 

최대공약수를 구하는 코드는 2가지가 있다.

 

반복문 방식

	
	public static int gcd(int a, int b) {
		
		while(b!=0) {
			
			int r = a%b;
			a= b;
			b = r;
			
		}
		
		return a;
	
	}

 

재귀 방식

	
	public static int gcd(int a, int b) {
		
		if(b==0) {
			return a;
			
		}else {
			return gcd(b, a%b);
			
		}
	}

 

 

 

2) 최대공배수 : LCM

 

a = AD

b = BD 

라고 하자.

 

즉, D는 최대공약수이다.

그러면 A와 B는 서로소이다.

 

최대공배수는 ABD 가 되어야 한다.

 

이때

a*b/ 최대공약수

= ABDD/ D

= ABD 

 

즉, 최대공배수가 나온다.

 

그래서 gcd 가 최대공약수를 나타내는 메소드라고 할 때 

코드로 다음과 같이 나타낼 수 있다.

 

 

코드

 

	
	public static int lcm(int a, int b) {
		return a*b/gcd(a,b);
	}

 

 

 

2. 최종 코드

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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(), " " );
		
		int one= Integer.parseInt(st.nextToken());
		int two= Integer.parseInt(st.nextToken());
		
		System.out.println(gcd(one, two));
		System.out.println(lcm(one,two));
		
	}
	
	
	public static int gcd(int a, int b) {
		
		if(b==0) {
			return a;
			
		}else {
			return gcd(b, a%b);
			
		}
	}
	
	
	public static int lcm(int a, int b) {
		return a*b/gcd(a,b);
	}
}

 

참고 자료 :

 

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