유클리드 호제법(유클리드 알고리즘) 이란?
- 2개의 자연수 또는 정식의 최대공약수를 구하는 알고리즘의 하나이다.
- 호제법이란 말은 두 수가 서로 상대방 수를 나누어서 원하는 수를 얻는 알고리즘을 나타낸다.
알고리즘 이해하기
- 2개의 자연수(또는 정식) a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면 (단, a > b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다.
- 이 성질에 따라, b를 r로 나눈 나머지 r`2를 구하고, 다시 r을 r`로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다.
예시
- 1071(a)과 1029(b)의 최대공약수를 구한다면?
a % b = 1071 % 1029 = 42 = r
b % r = 1029 % 42 = 21 = r`
r % r`` = 42 % 21 = 0
=> 21은 1071과 1029의 최대공약수
코드작성
public static int GCD(int a, int b){
int r;
while(b) {
r = a % b;
a = b;
b = r;
}
return a;
}
public static int GCD(int a, int b) {
if (b == 0)
return a;
GCD(b, a % b);
}
출처