Algorithm

[알고리즘] 유클리드 호제법

Gyuri 2022. 6. 22. 23:19

유클리드 호제법 (유클리드 알고리즘)은 두 수의 최대공약수를 구하는 알고리즘이다.  호제법이란 두 수가 서로 상대방 수를 나눠 결국 원하는 수를 얻는 알고리즘이다.

 

유클리드 호제법을 이해하기 위해서는 MOD 연산에 대해 알아야 한다

MOD 연산이란? 

두 값을 나눈 나머지를 구하는 연산! 

 

예로, 1112와 695의 최대공약수를 구해보자

먼저, 큰 수를 작은 수로 나눈 나머지를 구한다. (MOD 연산 수행)

1112 MOD 695 = 417

 

그 후, 나눴던 수와 나머지로 또 MOD 연산을 한다.

695  MOD 417 = 278

이 과정을 계속 반복한다!

417 MOD 278= 139
278 MOD 139 = 0

 

나머지가 0이 됐을 때, 마지막 계산에서 나누는 수로 사용된 숫자 139가 1112와 695의 최대공약수가 된다!

 

 

1) 반복문을 이용해 최대공약수 구하기

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

 

 

2) 재귀함수를 이용해 최대공약수 구하기

 * 재귀함수란? 정의 단계에서 자신을 재참조하는 함수

int GCD(int a, int b) {
	if(a%b ==0) {
		return b;
	}
	return GCD(b, a%b);
}

재귀함수를 이용하면 구현이 간단하고 코드가 간결해지며 시간 복잡도는 0(logN)

 

 

+) 최소공배수 구하기

두 수의 곱 / 두 수의 최대 공약수

int lcm(int a, int b) { //최소공배수
	//L=A*B/G
	//0이 아닌 두 수의 곱 / 두 수의 최대 공약수
	return a*b / gcd(a,b);
}

 

'Algorithm' 카테고리의 다른 글

특정 규칙에 의한 배열 정렬 Arrays.sort Comparator  (0) 2022.07.14
[알고리즘] HashSet  (0) 2022.06.26
Java 문자열 비교 == 와 equals()의 차이  (0) 2022.06.21
자바 matches 함수  (0) 2022.06.20
Java의 문자열 메소드  (0) 2022.05.28