์ƒˆ์†Œ์‹

IN DEPTH CAKE/Coding-WIKI

[์ฝ”๋”ฉ] ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ ๊ตฌํ•˜๊ธฐ - ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ• (Euclidean Algorithm)

  • -

์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•

์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์ด๋ž€ ๋‹ค์Œ์˜ ์„ฑ์งˆ์„ ์ด์šฉํ•˜์—ฌ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ (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)

 

 

๋ โ—ผ๏ธŽ

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.