[Java] 유클리드 호제법(Euclidean algorithm)

universalcode·2024년 11월 23일

algorithm

목록 보기
1/1

유클리드 호제법(유클리드 알고리즘) 이란?

  • 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);
}

출처

profile
우주의 코드

0개의 댓글