어제의 나보다 성장한 오늘의 나

유클리드 호제법 - 최소공약수, 최대공배수 본문

공부/알고리즘

유클리드 호제법 - 최소공약수, 최대공배수

NineOne 2021. 4. 4. 03:05

호제법이란?

두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 알고리즘이다. 2개의 자연수 a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a> b) a와 b의 최대공약수는 b와 r의 최대 공약수와 같다. 

 

이 성질에 따라 b를 r로 나눈 나머지 r`를 구하고, 다시 r을 r`로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다.

 

유클리드 호제법은 최대공약수를 단순하면서도 빠르게 구할 수 있는 좋은 알고리즘이다. 손으로 계산하기에는 그 차이를 못 느낄 수도 있지만 컴퓨터는 소인수분해보다 유클리드 호제법을 훨씬 더 빠르게 계산한다.

 

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

public class Main {
	public static void main(String[] args) throws IOException {
		int num1 = 74;
		int num2 = 21;
		
		// 지금은 정적으로 값이 정해져 있지만 동적으로 a>b를 하기 위해서
		int gcd = gcd(Math.max(num1, num2), Math.min(num1, num2));
	}
	
	public static int gcd(int a, int b) {
		while(true) {
			int r = a%b;
			if( r == 0 ) return b;
			
			a = b;
			b = r;
		}
	}
}

최대 공배수

(A, B)의 최대 공배수 = (A*B)/(A, B)의 최소 공약수 

 

출처

 

Comments