Linearism › 이산수학 › DM.10

10강. 정수론

이산수학 · 4부. 정수와 그래프

심화 · 약 20분 · 연습문제 7 · 그림 1

요약

나눗셈 정리, 최대공약수와 유클리드 호제법, 베주 항등식, 합동, 모듈러 역원, 페르마 소정리, RSA의 원리

정수를 나누면 몫과 나머지가 나옵니다. 이 단순한 사실에서 최대공약수, 나머지 연산(합동), 페르마 소정리가 나오고, 결국 인터넷 보안의 바탕인 RSA 암호에 이릅니다. 고등학교에서 배운 약수·배수를 계산 도구로 발전시키는 강입니다.

정수론은 정수의 나눗셈을 다룹니다. 오래된 분야지만 오늘날 암호(인터넷의 HTTPS)가 바로 이 강의 정리 위에 서 있습니다. 5강의 동치관계로 정수를 나머지별로 묶는 합동이 중심 도구입니다.

10.1 나눗셈 정리

정리 10.1 (나눗셈 정리). 정수 aa와 양의 정수 dd에 대해 a=dq+ra = dq + r, 0≤r<d0 \le r < d인 정수 qq, rr이 유일하게 있습니다. qq를 몫(quotient), rr을 나머지(remainder)라 하고 r=a mod dr = a \bmod d로 씁니다.

증명 개요. 존재: 집합 {a−dq∣q∈Z}∩{0,1,2,… }\{a - dq \mid q \in \mathbb{Z}\} \cap \{0, 1, 2, \dots\}의 가장 작은 원소(6강의 정렬 원리)를 rr로 잡으면 r<dr < d입니다(r≥dr \ge d이면 r−dr - d가 더 작은 원소). 유일성: dq+r=dq′+r′dq + r = dq' + r'이면 d∣r−r′d \mid r - r'이고 ∣r−r′∣<d|r - r'| < d이므로 r=r′r = r'입니다. □

음수에도 나머지는 0 이상입니다: −7=3⋅(−3)+2-7 = 3 \cdot (-3) + 2이므로 −7 mod 3=2-7 \bmod 3 = 2입니다.

10.2 최대공약수와 유클리드 호제법

정의 10.2. 정수 aa, bb(둘 다 0은 아님)를 모두 나누는 가장 큰 양의 정수를 최대공약수(greatest common divisor, gcd) gcd⁡(a,b)\gcd(a, b)라 합니다. gcd⁡(a,b)=1\gcd(a, b) = 1이면 aa와 bb는 서로소(coprime)입니다.

정리 10.3. a=bq+ra = bq + r이면 gcd⁡(a,b)=gcd⁡(b,r)\gcd(a, b) = \gcd(b, r).

증명. dd가 aa와 bb를 나누면 r=a−bqr = a - bq도 나눕니다. 거꾸로 dd가 bb와 rr을 나누면 a=bq+ra = bq + r도 나눕니다. 공약수 전체가 같으므로 최대공약수도 같습니다. □

이 정리를 되풀이하면 유클리드 호제법(Euclidean algorithm)이 됩니다.

예제 10.4. gcd⁡(252,198)\gcd(252, 198):

252=198⋅1+54,198=54⋅3+36,54=36⋅1+18,36=18⋅2+0252 = 198 \cdot 1 + 54, \quad 198 = 54 \cdot 3 + 36, \quad 54 = 36 \cdot 1 + 18, \quad 36 = 18 \cdot 2 + 0

마지막으로 0이 아닌 나머지 18이 최대공약수입니다. 나머지가 매번 줄어들므로 반드시 끝나고, 두 단계마다 나머지가 절반 아래로 줄어들어 매우 빠릅니다.

10.3 베주 항등식

정리 10.5 (베주 항등식). 정수 aa, bb에 대해 gcd⁡(a,b)=ax+by\gcd(a, b) = ax + by인 정수 xx, yy가 있습니다.

증명 (구성). 유클리드 호제법을 거꾸로 거슬러 올라갑니다. 예제 10.4에서

18=54−36=54−(198−54⋅3)=4⋅54−198=4(252−198)−198=4⋅252−5⋅19818 = 54 - 36 = 54 - (198 - 54 \cdot 3) = 4 \cdot 54 - 198 = 4(252 - 198) - 198 = 4 \cdot 252 - 5 \cdot 198

이므로 x=4x = 4, y=−5y = -5입니다. 이 계산을 확장 유클리드 호제법(extended Euclidean algorithm)이라 합니다. □

따름정리 10.6. aa와 bb가 서로소이면 ax+by=1ax + by = 1인 정수 xx, yy가 있습니다.

10.4 합동

정의 10.7 (합동). m∣a−bm \mid a - b이면 “aa와 bb는 mm을 법으로 합동”이라 하고 a≡b(modm)a \equiv b \pmod m으로 씁니다. 같은 말로 a mod m=b mod ma \bmod m = b \bmod m입니다.

합동은 동치관계이고(5강의 예제 5.10), 동치류는 나머지 0,1,…,m−10, 1, \dots, m-1에 대응합니다.

정리 10.8. a≡ba \equiv b, c≡d(modm)c \equiv d \pmod m이면 a+c≡b+da + c \equiv b + d, ac≡bd(modm)ac \equiv bd \pmod m입니다.

증명. a=b+kma = b + km, c=d+lmc = d + lm이면 ac=bd+(bl+dk+klm)mac = bd + (bl + dk + klm)m입니다. 덧셈도 같습니다. □

그래서 큰 수의 나머지는 중간중간 나머지를 취해 계산해도 됩니다.

예제 10.9. 7100 mod 57^{100} \bmod 5: 7≡27 \equiv 2, 24=16≡1(mod5)2^4 = 16 \equiv 1 \pmod 5이므로 7100≡2100=(24)25≡17^{100} \equiv 2^{100} = (2^4)^{25} \equiv 1입니다.

10.5 모듈러 역원

정의 10.10. aaˉ≡1(modm)a\bar a \equiv 1 \pmod m인 aˉ\bar a를 aa의 mm에 대한 역원(inverse)이라 합니다.

정리 10.11. aa의 mm에 대한 역원은 gcd⁡(a,m)=1\gcd(a, m) = 1일 때 그리고 그때만 있습니다.

증명. gcd⁡(a,m)=1\gcd(a, m) = 1이면 베주 항등식 ax+my=1ax + my = 1에서 ax≡1ax \equiv 1이므로 xx가 역원입니다. 거꾸로 ax≡1ax \equiv 1이면 ax−1=myax - 1 = my이므로 aa와 mm의 공약수는 1을 나눕니다. □

mm이 소수 pp이면 1,…,p−11, \dots, p-1이 모두 역원을 가지므로, {0,1,…,p−1}\{0, 1, \dots, p-1\}은 사칙연산이 되는 수 체계(체)가 됩니다.

n을 바꾸면 나머지 연산의 덧셈표·곱셈표와, 0이 아닌 원소마다 곱셈 역원이 있는지가 바뀝니다

이 위젯은 JavaScript가 필요합니다

예제 10.12. 3x≡4(mod7)3x \equiv 4 \pmod 7을 풉니다. 3⋅5=15≡13 \cdot 5 = 15 \equiv 1이므로 3ˉ=5\bar 3 = 5이고, 양변에 5를 곱해 x≡20≡6(mod7)x \equiv 20 \equiv 6 \pmod 7입니다.

10.6 페르마 소정리

정리 10.13 (페르마 소정리). pp가 소수이고 p∤ap \nmid a이면 ap−1≡1(modp)a^{p-1} \equiv 1 \pmod p.

증명. a,2a,…,(p−1)aa, 2a, \dots, (p-1)a를 pp로 나눈 나머지는 서로 다릅니다(ia≡jaia \equiv ja이면 aa의 역원을 곱해 i≡ji \equiv j). 그러므로 그 나머지들은 1,…,p−11, \dots, p-1을 한 번씩 늘어놓은 것이고, 모두 곱하면 ap−1(p−1)!≡(p−1)!(modp)a^{p-1}(p-1)! \equiv (p-1)! \pmod p입니다. (p−1)!(p-1)!은 pp와 서로소이므로 역원을 곱해 지우면 됩니다. □

예제 10.14. 3100 mod 113^{100} \bmod 11: 310≡13^{10} \equiv 1이므로 3100=(310)10≡13^{100} = (3^{10})^{10} \equiv 1입니다.

10.7 RSA의 원리

두 큰 소수 pp, qq를 골라 n=pqn = pq, φ=(p−1)(q−1)\varphi = (p-1)(q-1)로 둡니다. gcd⁡(e,φ)=1\gcd(e, \varphi) = 1인 ee를 고르고 ed≡1(modφ)ed \equiv 1 \pmod \varphi인 dd를 구합니다(정리 10.11). (n,e)(n, e)는 공개하고 dd는 숨깁니다.

  • 암호화: c=me mod nc = m^e \bmod n
  • 복호화: m=cd mod nm = c^d \bmod n

복호화가 맞는 이유는 ed=1+kφed = 1 + k\varphi와 페르마 소정리의 일반화(오일러 정리)로 med≡m(modn)m^{ed} \equiv m \pmod n이 되기 때문입니다. nn에서 pp, qq를 찾는(소인수분해) 빠른 방법이 알려져 있지 않으므로, ee를 알아도 dd를 구할 수 없습니다.

예제 10.15. p=5p = 5, q=11q = 11이면 n=55n = 55, φ=40\varphi = 40. e=3e = 3으로 고르면 3d≡1(mod40)3d \equiv 1 \pmod{40}에서 d=27d = 27. m=2m = 2를 암호화하면 c=23=8c = 2^3 = 8, 복호화하면 827 mod 55=28^{27} \bmod 55 = 2입니다.

쓰이는 곳. RSA와 타원곡선 암호(HTTPS), 해시 함수, 난수 생성, 오류 검출 부호(바코드, 카드 번호의 검증 숫자)가 이 강의 나머지 연산을 씁니다.

10.8 이 장의 요약

  • 유클리드 호제법: gcd⁡(a,b)=gcd⁡(b,a mod b)\gcd(a, b) = \gcd(b, a \bmod b). 거꾸로 올라가면 베주 계수.
  • 역원은 서로소일 때만 있고, 확장 유클리드 호제법으로 구합니다.
  • 페르마 소정리 ap−1≡1(modp)a^{p-1} \equiv 1 \pmod p로 큰 거듭제곱의 나머지를 줄입니다.

문제

10.1 [계산] · 확인 문제

gcd⁡(1071,462)\gcd(1071, 462)는?

정답
21
풀이

1071=462⋅2+1471071 = 462 \cdot 2 + 147, 462=147⋅3+21462 = 147 \cdot 3 + 21, 147=21⋅7147 = 21 \cdot 7이므로 21입니다.

10.2 [계산] · 확인 문제

gcd⁡(252,198)=252x+198y\gcd(252, 198) = 252x + 198y인 정수해 가운데 예제 10.4의 거꾸로 계산에서 나오는 해를 씁니다.

값 답
gcd⁡\gcd [?]
xx [?]
yy [?]
정답
18
4
-5
풀이

본문 정리 10.5의 계산으로 18=4⋅252−5⋅19818 = 4 \cdot 252 - 5 \cdot 198입니다.

10.3 [계산] · 확인 문제

77의 2626에 대한 역원(0 이상 25 이하)은?

힌트 1

7x+26y=17x + 26y = 1을 확장 유클리드 호제법으로 풉니다.

정답
15
풀이

26=7⋅3+526 = 7 \cdot 3 + 5, 7=5+27 = 5 + 2, 5=2⋅2+15 = 2 \cdot 2 + 1. 거꾸로 1=5−2⋅2=5−2(7−5)=3⋅5−2⋅7=3(26−3⋅7)−2⋅7=3⋅26−11⋅71 = 5 - 2 \cdot 2 = 5 - 2(7 - 5) = 3 \cdot 5 - 2 \cdot 7 = 3(26 - 3 \cdot 7) - 2 \cdot 7 = 3 \cdot 26 - 11 \cdot 7. 그러므로 7ˉ≡−11≡15\bar 7 \equiv -11 \equiv 15입니다. 확인: 7⋅15=105=4⋅26+17 \cdot 15 = 105 = 4 \cdot 26 + 1.

10.4 [계산] · 확인 문제

2100 mod 132^{100} \bmod 13은?

힌트 1

페르마 소정리로 212≡1(mod13)2^{12} \equiv 1 \pmod{13}입니다. 100=12⋅8+4100 = 12 \cdot 8 + 4입니다.

정답
3
풀이

2100=(212)8⋅24≡16≡3(mod13)2^{100} = (2^{12})^8 \cdot 2^4 \equiv 16 \equiv 3 \pmod{13}입니다.

10.5 [계산]

5x≡3(mod17)5x \equiv 3 \pmod{17}의 해(0 이상 16 이하)는?

정답
4
풀이

5⋅7=35≡15 \cdot 7 = 35 \equiv 1이므로 5ˉ=7\bar 5 = 7입니다. x≡21≡4(mod17)x \equiv 21 \equiv 4 \pmod{17}. 확인: 5⋅4=20≡35 \cdot 4 = 20 \equiv 3.

10.6 [계산]

예제 10.15의 RSA(n=55n = 55, e=3e = 3)로 m=7m = 7을 암호화한 cc는?

정답
13
풀이

73=343=55⋅6+137^3 = 343 = 55 \cdot 6 + 13이므로 c=13c = 13입니다. 복호화하면 1327 mod 55=713^{27} \bmod 55 = 7입니다.

10.7 [증명]

정수 aa의 각 자리 숫자의 합을 ss라 할 때 a≡s(mod9)a \equiv s \pmod 9임을 보입니다. (그래서 “자리 숫자의 합이 9의 배수이면 9의 배수”입니다.)

풀이

a=dk10k+⋯+d1⋅10+d0a = d_k 10^k + \cdots + d_1 \cdot 10 + d_0이라 합시다. 10≡1(mod9)10 \equiv 1 \pmod 9이므로 정리 10.8로 10i≡110^i \equiv 1이고, a≡dk+⋯+d1+d0=s(mod9)a \equiv d_k + \cdots + d_1 + d_0 = s \pmod 9입니다.