최대공약수(GCD)와 최소공배수(LCM) 알고리즘

nnm·2020년 1월 26일
0

유클리드 호제법

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

2개의 자연수(또는 정식) a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a>b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이 성질에 따라, b를 r로 나눈 나머지 r’를 구하고, 다시 r을 r’로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다.

재귀형태로 구현하기

// 최대공약수 구하기
int getGCD(int a, int b) {
  if(b == 0){
  	return a;
  } else {
    return getGCD(b, a % b);
}
  
// 여러 수 사이의 최대공약수 구하기
int getGCD(int[] arr) {
  if(arr.length < 2) {
    return arr[0];
  }
		
  int result = getGCD(arr[0], arr[1]);

  for(int i = 2 ; i < arr.length ; ++i) {
    result = getGCD(result, arr[i]);
  }

  return result;
}
  
// 최소공배수 구하기
int getLCM(int a, int b) {
  return a * b / getGCD(a, b);
}

문제

profile
그냥 개발자

2개의 댓글

comment-user-thumbnail
2020년 3월 25일

좋은글 감사합니다..! 본인 블로그 글에도 이 글 참고해서 저장해두려고 하는데 그래도 될까요?

1개의 답글