본문 바로가기
Algorithmic Wisdom 🧠/Dynamic

[알고리즘][재귀] - 유클리드 알고리즘 (Euclidean algorithm)

by dudefromkorea 2023. 7. 8.

최대공약수(Greatest common divisor)란?

"0이 아닌 두 개 이상의 정수의 공통되는 약수 중에서 가장 큰 수이다."

 

 

최대공약수를 구하는 가장 대표적인 방법

(소인수분해와 나눗셈을 이용하는 방법)은

소인수분해 원리에 기반을 두기에, 정수의 크기가 커질수록

직접 소인수분해 하기엔 부담이 된다.

 

이때 효과적인 방법은 나눗셈 정리에 기반

유클리드 호제법을 사용하는 것이다.

 

 

 

유클리드 호제법이란(Euclidean algorithm)?

"2개의 자연수 또는 정식의 최대공약수를 구하는 인류 최초의 알고리즘이다."

 

 

두 양의 정수 a , b (a < b)에 대하여 a = b * q + r (0≤ r < b)이라 하면,

a , b 의 최대공약수는 b , r 의 최대공약수와 같다.

 

즉 gcd(a , b) = gcd(b , r)

 

r = 0이라면 a , b의 최대공약수는 b가 된다.

 

 

 

예시로 1234567과 12345의 최대공약수를 위 알고리즘을 통하여 계산하면,

1234567 = 12345 *  100 + 67

12345 = 67 * 184 + 17

67 = 17 * 3 + 16

17 = 16 * 1 + 1

16 = 1 * 16

따라서 gcd(1234567 , 1234) = 1이다.

 

 

 

해당 알고리즘은 자바 코드로 이렇게 나타낼 수 있다.

반목문 사용한 공략법

 

재귀함수를 사용한 공략법

 

 

 

 

 

 

 

출처 : https://www.w3resource.com/java-exercises/basic/java-basic-exercise-157.php

728x90
반응형