MinsCode
도전하며 이루어내는 삶
MinsCode
전체 방문자
오늘
어제
  • 분류 전체보기 (9)
    • 백준 (0)
    • C (2)
    • Java (1)
    • 알고리즘 (4)
    • 자료구조 (2)
    • 일기 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준 9613 #유클리드호제법 #최대공약수 #GCD
  • 버블정렬
  • 정렬
  • 에라스토테네스의 체
  • 선택정렬
  • super
  • Big-O
  • 소수구하기
  • 포인터
  • Chain of construtor call
  • 포인터연산자
  • 삽입정렬
  • 포인터변수
  • 순차탐색
  • 소수찾기
  • inheritance
  • 이진탐색
  • 시간복잡도
  • 윤성우의 열혈 자료구조
  • construtor

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
MinsCode

도전하며 이루어내는 삶

알고리즘

[Algorithm] 최대공약수(Gcd) : 유클리드 호제법 원리

2022. 5. 11. 14:31

#유클리드 호제법

유클리드 호제법이란 두 자연수 사이의 최대공약수(Gcd)를 구하는 알고리즘 중 하나이다.

두 자연수 a, b(a>b)에 대하여 a를 b로 나눈 나머지를 r이라고 하자.

그러면 Gcd(a, b) = Gcd(b, r)와 같고, r = 0이 될때까지 이 과정을 반복했을때 b의 값이 두 수의 최대공약수가 된다.

#예시

두 수 1248과 462의 최대공약수를 유클리드 호제법을 이용하여 구해보자.

a = 1248, b = 462라 하면 

  • 1248 = 462 * 2 + 324

이때 Gcd(1248, 462) = Gcd(462, 324)이고, 다시 a= 462, b = 324라 하면

  • 462 = 324 * 1 + 138

마찬가지로 Gcd(462, 324) = Gcd(324, 138)이다.

이 과정을 r = 0이 될 때까지 반복하면 다음과 같다.

  • 324 = 138 * 2 + 48
  • 138 = 48 * 2 + 42
  • 48 = 42 * 1 + 6
  • 42 = 6 * 7 + 0

따라서 Gcd(1248, 462) = Gcd(462, 324) = ... = Gcd(42, 6) = Gcd(6, 0) 이고, 

두 수의 최대공약수는 6이 된다.


#구현

1. 재귀함수

int gcd(int a, int b)
{
	if (a > b) {
		if (b == 0)
			return a;
		else
			return gcd(b, a % b);
	}
}

위 코드는 유클리드 호제법을 재귀함수로 구현한 코드이다.

자기자신을 계속해서 호출하다가, 나머지가 0이 될 때 a값을 반환하고 종료된다.

 

2. 반복문

int gcd(int a, int b)
{
	int temp;
	if (a > b) {
		while (b > 0) {
			temp = a;
			a = b;
			b = temp % a;
		}
		return a;
	}
}

위 코드는 유클리드 호제법을 반복문으로 구현한 코드이다.

재귀함수는 문제가 발생할 가능성이 다분하므로, 위 반복문과 같이 변경할 수 있다.

나머지가 0이 될때 while문을 빠져나와, a값을 반환하고 종료된다.

 

유클리드 호제법은 두 수의 최대공약수를 구할 때 유용하게 사용하는 알고리즘이니 잘 기억하도록 하자.

 

 

 

 

'알고리즘' 카테고리의 다른 글

[Algorithm] 에라스토테네스의 체 : 소수 구하기  (0) 2022.11.21
[Algorithm] 순차 탐색(Sequential search)과 이진 탐색(Binary search)  (0) 2022.09.14
[Algorithm] 시간 복잡도(Time complexity)와 Big-O 표기법  (0) 2022.08.04
    '알고리즘' 카테고리의 다른 글
    • [Algorithm] 에라스토테네스의 체 : 소수 구하기
    • [Algorithm] 순차 탐색(Sequential search)과 이진 탐색(Binary search)
    • [Algorithm] 시간 복잡도(Time complexity)와 Big-O 표기법
    MinsCode
    MinsCode
    A life that challenges and achieves, and i will make it

    티스토리툴바