์ ํด๋ฆฌ๋ ํธ์ ๋ฒ
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ด๋ ๋ค์์ ์ฑ์ง์ ์ด์ฉํ์ฌ ์ต๋๊ณต์ฝ์ (Greatest Common Divisor, GCD) ๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค:
๋ ์ A์ B๊ฐ ์๋ค๊ณ ํ์ (A > B) ์ด ๋, A์ B๋ฅผ ๋๋ ๋๋จธ์ง R์ด๋ผ๊ณ ํ ๋,
A์ B์ ์ต๋ ๊ณต์ฝ์๋ B์ R์ ์ต๋ ๊ณต์ฝ์์ ๊ฐ๋ค.
ํ ๋ง๋๋ก GCD(A,B) = GCD(B, R)์ด ์ฑ๋ฆฝํ๋ค๋ ๊ฑด๋ฐ, ์กฐ๊ธ ์๊ฐํด๋ณด๋ฉด ์ด ํน์ง์ผ๋ก๋ถํฐ ์ฌ๊ท์ ์ธ ์ฑ์ง์ ๋์ถํ ์ ์์์ ์ ์ ์๋ค. ์ฆ, B๊ณผ R ์ญ์ B > R์ด ์ฑ๋ฆฝํ๋ฏ๋ก B๋ฅผ R๋ก ๋๋ ๋๋จธ์ง๋ฅผ X๋ผ๊ณ ํ๋ฉด
๊ฒฐ๊ตญ GCD(A,B) = GCD(B,R) = GCD(R,X) = ... ์ด ์ฑ๋ฆฝํ๋ค. ์ด ๋, ๋ ๊ฐ์ ๋๋ ๋๋จธ์ง๊ฐ 0์ผ ๋ ๊ฐ๋ค์ ์ฝ์๋ ํ๋์ด๋ฏ๋ก ์ต์ข
์ ์ผ๋ก ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, GCD(6, 4) = GCD(4, 2) = GCD(2, 0) = 2 ์ด๋ฏ๋ก
B ๊ฐ์ด 0์ด ๋ ๋๊น์ง ์ฃผ์ด์ง ๋ ์์ ๋๋จธ์ง์ ๋ํ GCD๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๊ตฌํ ์ ์๋ค.
์ด๊ฑธ ์ฝ๋๋ก ๊ตฌํํ๋ฉด
def GCD(A, B):
""" A > B """
if B == 0: return A
return GCD(B, A%B)
๋ โผ๏ธ