์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ ๋ ์์ ์ต๋๊ณต์ฝ์๋ฅผ ๋๋์ ์ ๋๋จธ์ง๋ง ๋ฐ๋ณตํด์ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ์๋ฆฌ์ ์ฆ๋ช , ๊ณ์ฐ ์์, ์ต์๊ณต๋ฐฐ์๋ก ํ์ฅํ๋ ๋ฐฉ๋ฒ, ํ์ด์ฌ ๊ตฌํ๊ณผ ํ์ฉ๊น์ง ๊ณ ๋ฑ์ํ ์์ค์์ ์ ๋ฆฌํฉ๋๋ค.

์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ ๋ ์์ฐ์ $a$, $b$์ ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ ๋, ํฐ ์๋ฅผ ์์ ์๋ก ๋๋ ๋๋จธ์ง๋ก ํฐ ์๋ฅผ ๊ฐ์ ๋ผ์ฐ๋ ์ผ์ ๋๋จธ์ง๊ฐ 0์ด ๋ ๋๊น์ง ๋ฐ๋ณตํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์์ธ์๋ถํด๊ฐ ํ์ ์๊ณ , ์๊ฐ ์๋ฌด๋ฆฌ ์ปค๋ ๋๋์ ๋ช ๋ฒ์ด๋ฉด ๋๋๊ธฐ ๋๋ฌธ์ ์ปดํจํฐ๊ฐ ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ ๋ ์ง๊ธ๋ ๊ทธ๋๋ก ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ด๋ ๋ฌด์์ธ๊ฐ?
ํธ์ ๋ฒ(ไบ้คๆณ)์ด๋ผ๋ ์ด๋ฆ์ "์๋ก ๋๋๋ค"๋ ๋ป์ ๋๋ค. ๋ ์๊ฐ ๋ฒ๊ฐ์ ๊ฐ๋ฉฐ ๋๋๋ ์์ ๋๋๋ ์์ ์ญํ ์ ๋ฐ๊พธ๊ธฐ ๋๋ฌธ์ ๋ถ์ ์ด๋ฆ์ด๊ณ , ๊ธฐ์์ 300๋ ๋ฌด๋ ต ์ ํด๋ฆฌ๋๊ฐ ใ์๋ก ใ 7๊ถ์ ์ ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ๊ธฐ๋ก์ผ๋ก ๋จ์ ์๋ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์ด๋ฐ ๊ฐ์ฅ ์ค๋๋ ๊ฒ ์ค ํ๋์ ๋๋ค.
ํต์ฌ์ ๋จ ํ๋์ ๋ฑ์์ ๋๋ค. $a$๋ฅผ $b$๋ก ๋๋ ๋๋จธ์ง๋ฅผ $r$์ด๋ผ ํ ๋,
$$\gcd(a,\ b) = \gcd(b,\ r) \quad (a = bq + r,\ 0 \le r < b)$$
์ฌ๊ธฐ์ $\gcd$๋ ์ต๋๊ณต์ฝ์(greatest common divisor), $q$๋ ๋ชซ, $r$์ ๋๋จธ์ง์ ๋๋ค. ์ด ๋ฑ์์ "$a$์ $b$์ ์ต๋๊ณต์ฝ์๋ $b$์ ๋๋จธ์ง $r$์ ์ต๋๊ณต์ฝ์์ ๊ฐ๋ค"๊ณ ๋งํฉ๋๋ค. ์ง์ด $(a, b)$์์ $(b, r)$๋ก ๋ฐ๋ ๋๋ง๋ค ์๊ฐ ์์์ง๋ฏ๋ก, ๊ฐ์ ์ผ์ ๋ฐ๋ณตํ๋ฉด ์ธ์ ๊ฐ ๋๋จธ์ง๊ฐ 0์ด ๋๊ณ ๊ทธ๋ ๋จ์ ๋๋๋ ์๊ฐ ์ต๋๊ณต์ฝ์์ ๋๋ค. ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ ์ ์ฒด๊ฐ ์ด ๋ฑ์ ํ๋๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ์ ๋๋ค.
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ ๊ณ์ฐ ์์ — 1071๊ณผ 462
๊ต๊ณผ์์ ์์ฃผ ๋์ค๋ 1071๊ณผ 462๋ก ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ ์ง์ ๋๋ ค ๋ณด๊ฒ ์ต๋๋ค. ํฐ ์๋ฅผ ์์ ์๋ก ๋๋๊ณ , ๋๋จธ์ง๋ฅผ ๋ค์ ๋จ๊ณ์ ๋๋๋ ์๋ก ๋๊น๋๋ค.
$$\begin{aligned} 1071 &= 462 \times 2 + 147 \\ 462 &= 147 \times 3 + 21 \\ 147 &= 21 \times 7 + 0 \end{aligned}$$
์ฒซ ์ค์์ 1071์ 462๋ก ๋๋ ๋๋จธ์ง 147์ ์ป๊ณ , ๋์งธ ์ค์์ 462๋ฅผ 147๋ก ๋๋ ๋๋จธ์ง 21์ ์ป๊ณ , ์ ์งธ ์ค์์ 147์ 21๋ก ๋๋๋ ๋๋จธ์ง๊ฐ 0์ ๋๋ค. ๋๋จธ์ง๊ฐ 0์ด ๋ ์๊ฐ์ ๋๋๋ ์ 21์ด ์ต๋๊ณต์ฝ์์ ๋๋ค. ์ค์ ๋ก $1071 = 3^2 \times 7 \times 17$, $462 = 2 \times 3 \times 7 \times 11$์ด๋ฏ๋ก ๊ณตํต ์์ธ์์ ๊ณฑ $3 \times 7 = 21$๊ณผ ์ผ์นํฉ๋๋ค. ์์ธ์๋ถํด๋ก ํ๋ฉด 1071์ด 17๋ก ๋๋์ด๋จ์ด์ง๋ค๋ ์ฌ์ค์ ์ฐพ์๋ด์ผ ํ์ง๋ง, ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ ๋๋์ ์ธ ๋ฒ์ผ๋ก ๋๋ฌ์ต๋๋ค.
๋๋จธ์ง๊ฐ 0์ด ๋๊ธฐ ์ง์ ์ ๋๋จธ์ง๊ฐ ๋ต์ด๋ผ๊ณ ์ธ์ฐ๋ฉด ํท๊ฐ๋ฆฌ๊ธฐ ์ฝ์ต๋๋ค. "๋๋จธ์ง๊ฐ 0์ด ๋ ๋๋์ ์์ ๋๋๋ ์"๋ผ๊ณ ๊ธฐ์ตํ๋ ํธ์ด ์ ํํฉ๋๋ค. ๋ ์๊ฐ ์๋ก์๋ผ๋ฉด ๋ง์ง๋ง ๋๋๋ ์๊ฐ 1์ด ๋์ด, ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ ์๋ก์ ํ์ ์๋ ๊ทธ๋๋ก ์ฐ์ ๋๋ค.
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ ์ฆ๋ช — ์ ๋๋จธ์ง๋ก ๋ฐ๊ฟ๋ ๋๋๊ฐ?
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ ์ฆ๋ช ์ "$a$์ $b$์ ๊ณต์ฝ์ ์งํฉ"๊ณผ "$b$์ $r$์ ๊ณต์ฝ์ ์งํฉ"์ด ์์ ํ ๊ฐ๋ค๋ ๊ฒ์ ๋ณด์ด๋ฉด ๋๋ฉ๋๋ค. ๋ ์งํฉ์ด ๊ฐ์ผ๋ฉด ๊ทธ ์์ ๊ฐ์ฅ ํฐ ์์, ์ฆ ์ต๋๊ณต์ฝ์๋ ๊ฐ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋จผ์ $d$๊ฐ $a$์ $b$์ ๊ณต์ฝ์๋ผ๊ณ ํฉ์๋ค. $a = bq + r$์ $r = a - bq$๋ก ๊ณ ์ณ ์ฐ๋ฉด, $d$๋ $a$๋ ๋๋๊ณ $bq$๋ ๋๋๋ฏ๋ก ๊ทธ ์ฐจ์ธ $r$๋ ๋๋๋๋ค. ๋ฐ๋ผ์ $d$๋ $b$์ $r$์ ๊ณต์ฝ์์ ๋๋ค. ๊ฑฐ๊พธ๋ก $d$๊ฐ $b$์ $r$์ ๊ณต์ฝ์์ด๋ฉด, $bq + r$์ $d$์ ๋ฐฐ์๋ผ๋ฆฌ์ ํฉ์ด๋ฏ๋ก $a$๋ $d$์ ๋ฐฐ์์ ๋๋ค. ๋ฐ๋ผ์ $d$๋ $a$์ $b$์ ๊ณต์ฝ์์ ๋๋ค. ํ์ชฝ ๊ณต์ฝ์๋ ๋ฐ๋์ ๋ค๋ฅธ ์ชฝ ๊ณต์ฝ์์ด๋ฏ๋ก ๋ ์งํฉ์ ๊ฐ๊ณ , $\gcd(a, b) = \gcd(b, r)$์ด ์ฑ๋ฆฝํฉ๋๋ค.
์ฆ๋ช ์์ ์ด ์ฌ์ค์ "์ฝ์๋ ํฉ๊ณผ ์ฐจ์ ๋ํด ๋ณด์กด๋๋ค"๋ ๊ฒ๋ฟ์ ๋๋ค. ์ด๊ฒ์ด ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ ์๋ฆฌ์ ์ ๋ถ์ด๊ณ , ๋๋จธ์ง๋ฅผ ์ทจํ๋ ์ฐ์ฐ์ด ์ต๋๊ณต์ฝ์๋ฅผ ์ ํ ๊ฑด๋๋ฆฌ์ง ์๋ ์ด์ ์ ๋๋ค. ์๊ณ ๋ฆฌ์ฆ์ด ๋ฐ๋์ ๋๋๋ค๋ ๊ฒ๋ ๋ถ๋ช ํฉ๋๋ค. ๋๋จธ์ง $r$์ ํญ์ $b$๋ณด๋ค ์์ผ๋ฏ๋ก ๊ฐ ๋จ๊ณ์์ ๋ ๋ฒ์งธ ์๊ฐ ์๊ฒฉํ ๊ฐ์ํ๊ณ , ์์ด ์๋ ์ ์๋ ๋ฌดํํ ๊ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ผ๋ก ์ต์๊ณต๋ฐฐ์ ๊ตฌํ๋ ๋ฒ
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ ์ต์๊ณต๋ฐฐ์ ๋ฌธ์ ๋ ๋ณ๋์ ์๊ณ ๋ฆฌ์ฆ์ด ํ์ํ์ง ์์ต๋๋ค. ๋ ์์ฐ์์ ๊ณฑ์ ์ต๋๊ณต์ฝ์์ ์ต์๊ณต๋ฐฐ์์ ๊ณฑ๊ณผ ๊ฐ๋ค๋ ๊ด๊ณ๋ฅผ ์ฐ๋ฉด ๋ฉ๋๋ค.
$$\operatorname{lcm}(a,\ b) = \frac{a \times b}{\gcd(a,\ b)}$$
$\operatorname{lcm}$์ ์ต์๊ณต๋ฐฐ์(least common multiple)์ ๋๋ค. ์์ ์๋ก ๊ณ์ฐํ๋ฉด $1071 \times 462 \div 21 = 23562$๊ฐ ์ต์๊ณต๋ฐฐ์์ ๋๋ค. ์์ธ์๋ถํด ๊ด์ ์์ ๋ณด๋ฉด ์ต๋๊ณต์ฝ์๋ ๊ณตํต ์์ธ์๋ฅผ ๋ฎ์ ์ง์๋ก ๋ชจ์ ๊ฒ์ด๊ณ ์ต์๊ณต๋ฐฐ์๋ ๋์ ์ง์๋ก ๋ชจ์ ๊ฒ์ด๋ผ, ๋์ ๊ณฑํ๋ฉด ๊ฐ ์์ธ์์ ์ง์๊ฐ ์๋ ๋ ์์ ์ง์ ํฉ์ด ๋์ด $a \times b$์ ๊ฐ์์ง๋๋ค. ํ๋ก๊ทธ๋๋ฐ์์๋ ์ค๋ฒํ๋ก๋ฅผ ํผํ๋ ค๊ณ $a \div \gcd(a, b)$๋ฅผ ๋จผ์ ๊ณ์ฐํ ๋ค $b$๋ฅผ ๊ณฑํ๋ ์์๋ฅผ ๊ถ์ฅํฉ๋๋ค.
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ ํ์ด์ฌ ๊ตฌํ๊ณผ ๊ณ์ฐ ํ์
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ ์๊ณ ๋ฆฌ์ฆ์ ์ฝ๋๋ก ์ฎ๊ธฐ๋ฉด ์ธ ์ค์
๋๋ค. ํ์ด์ฌ์์๋ ๋๋จธ์ง ์ฐ์ฐ์ %๋ฅผ ์ฐ๊ณ , ๋ ๋ฒ์งธ ์๊ฐ 0์ด ๋ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
def gcd(a, b):
while b:
a, b = b, a % b
return a
ํ ์ค๋ก ์ฐ๋ฉด ์ฌ๊ทํ gcd(b, a % b)๊ฐ ๋๊ณ , ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ math.gcd๊ฐ ์ด๋ฏธ ๋ค์ด ์์ต๋๋ค. C ์ธ์ด๋ ๊ตฌ์กฐ๋ ๋๊ฐ์์, ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ C ๊ตฌํ์ while ๋ฌธ ์์์ ์์ ๋ณ์ ํ๋๋ก ๋ ๊ฐ์ ๊ตํํ๋ ํํ์
๋๋ค. ์
๋ ฅ ์์๋ฅผ ์ ๊ฒฝ ์ธ ํ์๋ ์์ต๋๋ค. ์์ ์๊ฐ ์์ ์ค๋ฉด ์ฒซ ๋จ๊ณ์์ $a \% b = a$๊ฐ ๋์ด ์๋์ผ๋ก ์๋ฆฌ๊ฐ ๋ฐ๋๋๋ค.
๋๋์ ์ ๋ช ๋ฒ ํด์ผ ํ๋์ง๋ ์ ํํ ์๋ ค์ ธ ์์ต๋๋ค. ๋ผ๋ฉ์ ์ ๋ฆฌ์ ๋ฐ๋ฅด๋ฉด ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ ๋๋์ ํ์๋ ์์ ์์ ์๋ฆฟ์์ 5๋ฐฐ๋ฅผ ๋์ง ์์ต๋๋ค. ์ฆ 10์๋ฆฌ ์๋ผ๋ฆฌ๋ผ๋ 50๋ฒ ์์ ๋๋๊ณ , ์๊ฐ๋ณต์ก๋๋ก๋ $O(\log \min(a, b))$์ ๋๋ค. ๊ฐ์ฅ ์ค๋ ๊ฑธ๋ฆฌ๋ ์ ๋ ฅ์ ์ฐ์ํ ํผ๋ณด๋์น ์ ๋ ๊ฐ์ธ๋ฐ, ๋งค ๋จ๊ณ ๋ชซ์ด 1์ด๋ผ ์๊ฐ ๊ฐ์ฅ ์ฒ์ฒํ ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ ํ์ฉ — ๋ถ์ ์ฝ๋ถ์์ ์ํธ๊น์ง
๊ฐ์ฅ ์ผ์์ ์ธ ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ ํ์ฉ์ ๋ถ์ ์ฝ๋ถ์ ๋๋ค. ๋ถ์์ ๋ถ๋ชจ์ ์ต๋๊ณต์ฝ์๋ก ๋๋๋ฉด ๊ธฐ์ฝ๋ถ์๊ฐ ๋๊ณ , ๊ณ์ฐ๊ธฐ์ ์คํ๋ ๋์ํธ๊ฐ ๋ด๋ถ์์ ํ๋ ์ผ์ด ๋ฐ๋ก ์ด๊ฒ์ ๋๋ค. ํ์ผ ๊น๊ธฐ ๋ฌธ์ ๋ ๊ฐ์ต๋๋ค. ๊ฐ๋ก 1071, ์ธ๋ก 462์ธ ์ง์ฌ๊ฐํ์ ๋นํ์์ด ์ฑ์ฐ๋ ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ์ ํ ๋ณ์ 21์ด๊ณ , ์ด ๊ทธ๋ฆผ์ ์ค์ ๋ก ์ ํด๋ฆฌ๋๊ฐ ํธ์ ๋ฒ์ ์ค๋ช ํ ๋ฐฉ์๊ณผ ๊ฐ์ต๋๋ค. ํฐ ์ง์ฌ๊ฐํ์์ ์ ์ฌ๊ฐํ์ ์๋ผ ๋ด๊ณ ๋จ์ ์์ ์ง์ฌ๊ฐํ์ ๊ฐ์ ์ผ์ ๋ฐ๋ณตํ๋ ๊ฒ์ด ๋๋์ ์ ๊ธฐํํ์ ์๋ฏธ์ ๋๋ค.
ํ ๋จ๊ณ ๋ ๋์๊ฐ ํ์ฅ ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ $ax + by = \gcd(a, b)$๋ฅผ ๋ง์กฑํ๋ ์ ์ $x$, $y$๋ฅผ ํจ๊ป ์ฐพ์ ์ค๋๋ค. ๊ฐ ๋จ๊ณ์ ๋๋์ ๋ฑ์์ ๊ฑฐ๊พธ๋ก ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ ๋๋จธ์ง๋ฅผ ์๋ ๋ ์์ ์กฐํฉ์ผ๋ก ํํํ๋ ๋ฐฉ์์ ๋๋ค. ์ด ์ ์ํด๊ฐ ์์ด์ผ ๋๋จธ์ง ์ฐ์ฐ์์ ์ญ์์ ๊ตฌํ ์ ์๊ณ , RSA ์ํธ์์ ๊ฐ์ธ ํค๋ฅผ ๊ณ์ฐํ๋ ๋จ๊ณ๊ฐ ์ ํํ ์ด ๊ณ์ฐ์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋งค์ผ ์ฐ๋ ์ธํฐ๋ท ๋ณด์์ ๋ฐ๋ฅ์ 2300๋ ๋ ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ด ๊ทธ๋๋ก ๊น๋ ค ์๋ ์ ์ ๋๋ค.
์ ๋ ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ ์ฒ์ ๋ฐฐ์ธ ๋ "์์ธ์๋ถํด๊ฐ ์๋๋ฐ ์ ์ด๋ฐ ๊ฑธ ๋ ๋ฐฐ์ฐ๋" ์ถ์์ต๋๋ค. ์๊ฐ์ด ๋ฐ๋ ๊ฑด ๋ํ์์ ์๋ฐฑ ์๋ฆฌ ์์ ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๋ ๊ณผ์ ๋ฅผ ๋ฐ์์ ๋์์ต๋๋ค. ์์ธ์๋ถํด๋ ์์ ์๋์กฐ์ฐจ ๋ชป ํ๋ ํฌ๊ธฐ์๋๋ฐ, ํธ์ ๋ฒ์ ๋๋์ ๋ช๋ฐฑ ๋ฒ์ผ๋ก ์์๊ฐ์ ๋๋ฌ์ต๋๋ค. ๊ทธ๋๋ถํฐ ์ด ์๊ณ ๋ฆฌ์ฆ์ด ์์ธ์๋ถํด์ ๋์ฒดํ์ด ์๋๋ผ, ์์ธ์๋ถํด๊ฐ ๋ถ๊ฐ๋ฅํ ๊ณณ์์๋ง ์๋ํ๋ ๋๊ตฌ๋ผ๋ ๊ฒ์ ์ดํดํ๊ฒ ๋์ต๋๋ค.
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ ํต์ฌ ์์ฝ
- ์๋ฆฌ: $\gcd(a, b) = \gcd(b, a \bmod b)$. ๋๋จธ์ง๊ฐ 0์ด ๋๋ฉด ๊ทธ๋์ ๋๋๋ ์๊ฐ ์ต๋๊ณต์ฝ์.
- ์ฆ๋ช : ์ฝ์๋ ํฉ๊ณผ ์ฐจ์ ๋ณด์กด๋๋ฏ๋ก $(a, b)$์ $(b, r)$์ ๊ณต์ฝ์ ์งํฉ์ด ๊ฐ๋ค.
- ์ต์๊ณต๋ฐฐ์: $a \times b \div \gcd(a, b)$๋ก ๋ฐ๋ก ๊ณ์ฐ.
- ์๋: ๋๋์ ํ์๋ ์์ ์ ์๋ฆฟ์์ 5๋ฐฐ ์ดํ, $O(\log n)$. ์ต์ ์ ์ฐ์ ํผ๋ณด๋์น ์.