유클리드 알고리즘은 2개의 자연수 또는 정식의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란 말은 두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 알고리즘을 나타낸다.

유클리드 호제법은 나눗셈만 반복해서 최대공약수를 구할 수 있다.
두 개의 수가 아무리 커도 정해진 순서로 계산하면 효율적으로 최대공약수를 구할 수 있다.

유클리드 호제법은 반복문과 재귀함수를 통해 쉽게 표현할 수 있다.

최대공약수

반복문

a > b임을 가정

// b가 0이 될때까지(a%b), 반복문을 돌게되고,
// b가 0인 순간의 a를 GCD로 판단하고 리턴합니다.
int GCD(int a, int b){
  while(b != 0){
    int r = a % b;
    a = b;
    b = c;
  }
  return a;
}

재귀함수

int GCD(int a, int b){
  return b ? GCD(b, a % b) : a;
}

최소공배수

int LCM(int a, int b){
  return a * b / GCD(a, b);
}

댓글남기기