정수를 나누면 몫과 나머지가 나옵니다. 이 단순한 사실에서 최대공약수, 나머지 연산(합동), 페르마 소정리가 나오고, 결국 인터넷 보안의 바탕인 RSA 암호에 이릅니다. 고등학교에서 배운 약수·배수를 계산 도구로 발전시키는 강입니다.
정수론은 정수의 나눗셈을 다룹니다. 오래된 분야지만 오늘날 암호(인터넷의 HTTPS)가 바로 이 강의 정리 위에 서 있습니다. 5강의 동치관계로 정수를 나머지별로 묶는 합동이 중심 도구입니다.
10.1 나눗셈 정리
정리 10.1 (나눗셈 정리). 정수 a a a 와 양의 정수 d d d 에 대해 a = d q + r a = dq + r a = d q + r , 0 ≤ r < d 0 \le r < d 0 ≤ r < d 인 정수 q q q , r r r 이 유일하게 있습니다. q q q 를 몫 (quotient), r r r 을 나머지 (remainder)라 하고 r = a m o d d r = a \bmod d r = a mod d 로 씁니다.
증명 개요. 존재: 집합 { a − d q ∣ q ∈ Z } ∩ { 0 , 1 , 2 , … } \{a - dq \mid q \in \mathbb{Z}\} \cap \{0, 1, 2, \dots\} { a − d q ∣ q ∈ Z } ∩ { 0 , 1 , 2 , … } 의 가장 작은 원소(6강의 정렬 원리)를 r r r 로 잡으면 r < d r < d r < d 입니다(r ≥ d r \ge d r ≥ d 이면 r − d r - d r − d 가 더 작은 원소). 유일성: d q + r = d q ′ + r ′ dq + r = dq' + r' d q + r = d q ′ + r ′ 이면 d ∣ r − r ′ d \mid r - r' d ∣ r − r ′ 이고 ∣ r − r ′ ∣ < d |r - r'| < d ∣ r − r ′ ∣ < d 이므로 r = r ′ r = r' r = r ′ 입니다. □
음수에도 나머지는 0 이상입니다: − 7 = 3 ⋅ ( − 3 ) + 2 -7 = 3 \cdot (-3) + 2 − 7 = 3 ⋅ ( − 3 ) + 2 이므로 − 7 m o d 3 = 2 -7 \bmod 3 = 2 − 7 mod 3 = 2 입니다.
10.2 최대공약수와 유클리드 호제법
정의 10.2. 정수 a a a , b b b (둘 다 0은 아님)를 모두 나누는 가장 큰 양의 정수를 최대공약수 (greatest common divisor, gcd) gcd ( a , b ) \gcd(a, b) g cd( a , b ) 라 합니다. gcd ( a , b ) = 1 \gcd(a, b) = 1 g cd( a , b ) = 1 이면 a a a 와 b b b 는 서로소 (coprime)입니다.
정리 10.3. a = b q + r a = bq + r a = b q + r 이면 gcd ( a , b ) = gcd ( b , r ) \gcd(a, b) = \gcd(b, r) g cd( a , b ) = g cd( b , r ) .
증명. d d d 가 a a a 와 b b b 를 나누면 r = a − b q r = a - bq r = a − b q 도 나눕니다. 거꾸로 d d d 가 b b b 와 r r r 을 나누면 a = b q + r a = bq + r a = b q + r 도 나눕니다. 공약수 전체가 같으므로 최대공약수도 같습니다. □
이 정리를 되풀이하면 유클리드 호제법 (Euclidean algorithm)이 됩니다.
예제 10.4. gcd ( 252 , 198 ) \gcd(252, 198) g cd( 252 , 198 ) :
252 = 198 ⋅ 1 + 54 , 198 = 54 ⋅ 3 + 36 , 54 = 36 ⋅ 1 + 18 , 36 = 18 ⋅ 2 + 0 252 = 198 \cdot 1 + 54, \quad 198 = 54 \cdot 3 + 36, \quad 54 = 36 \cdot 1 + 18, \quad 36 = 18 \cdot 2 + 0 252 = 198 ⋅ 1 + 54 , 198 = 54 ⋅ 3 + 36 , 54 = 36 ⋅ 1 + 18 , 36 = 18 ⋅ 2 + 0
마지막으로 0이 아닌 나머지 18이 최대공약수입니다. 나머지가 매번 줄어들므로 반드시 끝나고, 두 단계마다 나머지가 절반 아래로 줄어들어 매우 빠릅니다.
10.3 베주 항등식
정리 10.5 (베주 항등식). 정수 a a a , b b b 에 대해 gcd ( a , b ) = a x + b y \gcd(a, b) = ax + by g cd( a , b ) = a x + b y 인 정수 x x x , y y y 가 있습니다.
증명 (구성). 유클리드 호제법을 거꾸로 거슬러 올라갑니다. 예제 10.4에서
18 = 54 − 36 = 54 − ( 198 − 54 ⋅ 3 ) = 4 ⋅ 54 − 198 = 4 ( 252 − 198 ) − 198 = 4 ⋅ 252 − 5 ⋅ 198 18 = 54 - 36 = 54 - (198 - 54 \cdot 3) = 4 \cdot 54 - 198 = 4(252 - 198) - 198 = 4 \cdot 252 - 5 \cdot 198 18 = 54 − 36 = 54 − ( 198 − 54 ⋅ 3 ) = 4 ⋅ 54 − 198 = 4 ( 252 − 198 ) − 198 = 4 ⋅ 252 − 5 ⋅ 198
이므로 x = 4 x = 4 x = 4 , y = − 5 y = -5 y = − 5 입니다. 이 계산을 확장 유클리드 호제법 (extended Euclidean algorithm)이라 합니다. □
따름정리 10.6. a a a 와 b b b 가 서로소이면 a x + b y = 1 ax + by = 1 a x + b y = 1 인 정수 x x x , y y y 가 있습니다.
10.4 합동
정의 10.7 (합동). m ∣ a − b m \mid a - b m ∣ a − b 이면 “a a a 와 b b b 는 m m m 을 법으로 합동”이라 하고 a ≡ b ( m o d m ) a \equiv b \pmod m a ≡ b ( mod m ) 으로 씁니다. 같은 말로 a m o d m = b m o d m a \bmod m = b \bmod m a mod m = b mod m 입니다.
합동은 동치관계이고(5강의 예제 5.10), 동치류는 나머지 0 , 1 , … , m − 1 0, 1, \dots, m-1 0 , 1 , … , m − 1 에 대응합니다.
정리 10.8. a ≡ b a \equiv b a ≡ b , c ≡ d ( m o d m ) c \equiv d \pmod m c ≡ d ( mod m ) 이면 a + c ≡ b + d a + c \equiv b + d a + c ≡ b + d , a c ≡ b d ( m o d m ) ac \equiv bd \pmod m a c ≡ b d ( mod m ) 입니다.
증명. a = b + k m a = b + km a = b + k m , c = d + l m c = d + lm c = d + l m 이면 a c = b d + ( b l + d k + k l m ) m ac = bd + (bl + dk + klm)m a c = b d + ( b l + d k + k l m ) m 입니다. 덧셈도 같습니다. □
그래서 큰 수의 나머지는 중간중간 나머지를 취해 계산해도 됩니다.
예제 10.9. 7 100 m o d 5 7^{100} \bmod 5 7 100 mod 5 : 7 ≡ 2 7 \equiv 2 7 ≡ 2 , 2 4 = 16 ≡ 1 ( m o d 5 ) 2^4 = 16 \equiv 1 \pmod 5 2 4 = 16 ≡ 1 ( mod 5 ) 이므로 7 100 ≡ 2 100 = ( 2 4 ) 25 ≡ 1 7^{100} \equiv 2^{100} = (2^4)^{25} \equiv 1 7 100 ≡ 2 100 = ( 2 4 ) 25 ≡ 1 입니다.
10.5 모듈러 역원
정의 10.10. a a ˉ ≡ 1 ( m o d m ) a\bar a \equiv 1 \pmod m a a ˉ ≡ 1 ( mod m ) 인 a ˉ \bar a a ˉ 를 a a a 의 m m m 에 대한 역원 (inverse)이라 합니다.
정리 10.11. a a a 의 m m m 에 대한 역원은 gcd ( a , m ) = 1 \gcd(a, m) = 1 g cd( a , m ) = 1 일 때 그리고 그때만 있습니다.
증명. gcd ( a , m ) = 1 \gcd(a, m) = 1 g cd( a , m ) = 1 이면 베주 항등식 a x + m y = 1 ax + my = 1 a x + m y = 1 에서 a x ≡ 1 ax \equiv 1 a x ≡ 1 이므로 x x x 가 역원입니다. 거꾸로 a x ≡ 1 ax \equiv 1 a x ≡ 1 이면 a x − 1 = m y ax - 1 = my a x − 1 = m y 이므로 a a a 와 m m m 의 공약수는 1을 나눕니다. □
m m m 이 소수 p p p 이면 1 , … , p − 1 1, \dots, p-1 1 , … , p − 1 이 모두 역원을 가지므로, { 0 , 1 , … , p − 1 } \{0, 1, \dots, p-1\} { 0 , 1 , … , p − 1 } 은 사칙연산이 되는 수 체계(체)가 됩니다.
n을 바꾸면 나머지 연산의 덧셈표·곱셈표와, 0이 아닌 원소마다 곱셈 역원이 있는지가 바뀝니다 이 위젯은 JavaScript가 필요합니다
예제 10.12. 3 x ≡ 4 ( m o d 7 ) 3x \equiv 4 \pmod 7 3 x ≡ 4 ( mod 7 ) 을 풉니다. 3 ⋅ 5 = 15 ≡ 1 3 \cdot 5 = 15 \equiv 1 3 ⋅ 5 = 15 ≡ 1 이므로 3 ˉ = 5 \bar 3 = 5 3 ˉ = 5 이고, 양변에 5를 곱해 x ≡ 20 ≡ 6 ( m o d 7 ) x \equiv 20 \equiv 6 \pmod 7 x ≡ 20 ≡ 6 ( mod 7 ) 입니다.
10.6 페르마 소정리
정리 10.13 (페르마 소정리). p p p 가 소수이고 p ∤ a p \nmid a p ∤ a 이면 a p − 1 ≡ 1 ( m o d p ) a^{p-1} \equiv 1 \pmod p a p − 1 ≡ 1 ( mod p ) .
증명. a , 2 a , … , ( p − 1 ) a a, 2a, \dots, (p-1)a a , 2 a , … , ( p − 1 ) a 를 p p p 로 나눈 나머지는 서로 다릅니다(i a ≡ j a ia \equiv ja ia ≡ j a 이면 a a a 의 역원을 곱해 i ≡ j i \equiv j i ≡ j ). 그러므로 그 나머지들은 1 , … , p − 1 1, \dots, p-1 1 , … , p − 1 을 한 번씩 늘어놓은 것이고, 모두 곱하면 a p − 1 ( p − 1 ) ! ≡ ( p − 1 ) ! ( m o d p ) a^{p-1}(p-1)! \equiv (p-1)! \pmod p a p − 1 ( p − 1 )! ≡ ( p − 1 )! ( mod p ) 입니다. ( p − 1 ) ! (p-1)! ( p − 1 )! 은 p p p 와 서로소이므로 역원을 곱해 지우면 됩니다. □
예제 10.14. 3 100 m o d 11 3^{100} \bmod 11 3 100 mod 11 : 3 10 ≡ 1 3^{10} \equiv 1 3 10 ≡ 1 이므로 3 100 = ( 3 10 ) 10 ≡ 1 3^{100} = (3^{10})^{10} \equiv 1 3 100 = ( 3 10 ) 10 ≡ 1 입니다.
10.7 RSA의 원리
두 큰 소수 p p p , q q q 를 골라 n = p q n = pq n = pq , φ = ( p − 1 ) ( q − 1 ) \varphi = (p-1)(q-1) φ = ( p − 1 ) ( q − 1 ) 로 둡니다. gcd ( e , φ ) = 1 \gcd(e, \varphi) = 1 g cd( e , φ ) = 1 인 e e e 를 고르고 e d ≡ 1 ( m o d φ ) ed \equiv 1 \pmod \varphi e d ≡ 1 ( mod φ ) 인 d d d 를 구합니다(정리 10.11 ). ( n , e ) (n, e) ( n , e ) 는 공개하고 d d d 는 숨깁니다.
암호화: c = m e m o d n c = m^e \bmod n c = m e mod n
복호화: m = c d m o d n m = c^d \bmod n m = c d mod n
복호화가 맞는 이유는 e d = 1 + k φ ed = 1 + k\varphi e d = 1 + k φ 와 페르마 소정리의 일반화(오일러 정리)로 m e d ≡ m ( m o d n ) m^{ed} \equiv m \pmod n m e d ≡ m ( mod n ) 이 되기 때문입니다. n n n 에서 p p p , q q q 를 찾는(소인수분해) 빠른 방법이 알려져 있지 않으므로, e e e 를 알아도 d d d 를 구할 수 없습니다.
예제 10.15. p = 5 p = 5 p = 5 , q = 11 q = 11 q = 11 이면 n = 55 n = 55 n = 55 , φ = 40 \varphi = 40 φ = 40 . e = 3 e = 3 e = 3 으로 고르면 3 d ≡ 1 ( m o d 40 ) 3d \equiv 1 \pmod{40} 3 d ≡ 1 ( mod 40 ) 에서 d = 27 d = 27 d = 27 . m = 2 m = 2 m = 2 를 암호화하면 c = 2 3 = 8 c = 2^3 = 8 c = 2 3 = 8 , 복호화하면 8 27 m o d 55 = 2 8^{27} \bmod 55 = 2 8 27 mod 55 = 2 입니다.
쓰이는 곳. RSA와 타원곡선 암호(HTTPS), 해시 함수, 난수 생성, 오류 검출 부호(바코드, 카드 번호의 검증 숫자)가 이 강의 나머지 연산을 씁니다.
10.8 이 장의 요약
유클리드 호제법: gcd ( a , b ) = gcd ( b , a m o d b ) \gcd(a, b) = \gcd(b, a \bmod b) g cd( a , b ) = g cd( b , a mod b ) . 거꾸로 올라가면 베주 계수.
역원은 서로소일 때만 있고, 확장 유클리드 호제법으로 구합니다.
페르마 소정리 a p − 1 ≡ 1 ( m o d p ) a^{p-1} \equiv 1 \pmod p a p − 1 ≡ 1 ( mod p ) 로 큰 거듭제곱의 나머지를 줄입니다.
문제
10.1 [계산] · 확인 문제
gcd ( 1071 , 462 ) \gcd(1071, 462) g cd( 1071 , 462 ) 는?
정답 풀이 1071 = 462 ⋅ 2 + 147 1071 = 462 \cdot 2 + 147 1071 = 462 ⋅ 2 + 147 , 462 = 147 ⋅ 3 + 21 462 = 147 \cdot 3 + 21 462 = 147 ⋅ 3 + 21 , 147 = 21 ⋅ 7 147 = 21 \cdot 7 147 = 21 ⋅ 7 이므로 21입니다.
10.2 [계산] · 확인 문제
gcd ( 252 , 198 ) = 252 x + 198 y \gcd(252, 198) = 252x + 198y g cd( 252 , 198 ) = 252 x + 198 y 인 정수해 가운데 예제 10.4의 거꾸로 계산에서 나오는 해를 씁니다.
값
답
gcd \gcd g cd
[?]
x x x
[?]
y y y
[?]
정답 풀이 본문 정리 10.5 의 계산으로 18 = 4 ⋅ 252 − 5 ⋅ 198 18 = 4 \cdot 252 - 5 \cdot 198 18 = 4 ⋅ 252 − 5 ⋅ 198 입니다.
10.3 [계산] · 확인 문제
7 7 7 의 26 26 26 에 대한 역원(0 이상 25 이하)은?
힌트 1 7 x + 26 y = 1 7x + 26y = 1 7 x + 26 y = 1 을 확장 유클리드 호제법으로 풉니다.
정답 풀이 26 = 7 ⋅ 3 + 5 26 = 7 \cdot 3 + 5 26 = 7 ⋅ 3 + 5 , 7 = 5 + 2 7 = 5 + 2 7 = 5 + 2 , 5 = 2 ⋅ 2 + 1 5 = 2 \cdot 2 + 1 5 = 2 ⋅ 2 + 1 . 거꾸로 1 = 5 − 2 ⋅ 2 = 5 − 2 ( 7 − 5 ) = 3 ⋅ 5 − 2 ⋅ 7 = 3 ( 26 − 3 ⋅ 7 ) − 2 ⋅ 7 = 3 ⋅ 26 − 11 ⋅ 7 1 = 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 1 = 5 − 2 ⋅ 2 = 5 − 2 ( 7 − 5 ) = 3 ⋅ 5 − 2 ⋅ 7 = 3 ( 26 − 3 ⋅ 7 ) − 2 ⋅ 7 = 3 ⋅ 26 − 11 ⋅ 7 . 그러므로 7 ˉ ≡ − 11 ≡ 15 \bar 7 \equiv -11 \equiv 15 7 ˉ ≡ − 11 ≡ 15 입니다. 확인: 7 ⋅ 15 = 105 = 4 ⋅ 26 + 1 7 \cdot 15 = 105 = 4 \cdot 26 + 1 7 ⋅ 15 = 105 = 4 ⋅ 26 + 1 .
10.4 [계산] · 확인 문제
2 100 m o d 13 2^{100} \bmod 13 2 100 mod 13 은?
힌트 1 페르마 소정리로 2 12 ≡ 1 ( m o d 13 ) 2^{12} \equiv 1 \pmod{13} 2 12 ≡ 1 ( mod 13 ) 입니다. 100 = 12 ⋅ 8 + 4 100 = 12 \cdot 8 + 4 100 = 12 ⋅ 8 + 4 입니다.
정답 풀이 2 100 = ( 2 12 ) 8 ⋅ 2 4 ≡ 16 ≡ 3 ( m o d 13 ) 2^{100} = (2^{12})^8 \cdot 2^4 \equiv 16 \equiv 3 \pmod{13} 2 100 = ( 2 12 ) 8 ⋅ 2 4 ≡ 16 ≡ 3 ( mod 13 ) 입니다.
10.5 [계산]
5 x ≡ 3 ( m o d 17 ) 5x \equiv 3 \pmod{17} 5 x ≡ 3 ( mod 17 ) 의 해(0 이상 16 이하)는?
정답 풀이 5 ⋅ 7 = 35 ≡ 1 5 \cdot 7 = 35 \equiv 1 5 ⋅ 7 = 35 ≡ 1 이므로 5 ˉ = 7 \bar 5 = 7 5 ˉ = 7 입니다. x ≡ 21 ≡ 4 ( m o d 17 ) x \equiv 21 \equiv 4 \pmod{17} x ≡ 21 ≡ 4 ( mod 17 ) . 확인: 5 ⋅ 4 = 20 ≡ 3 5 \cdot 4 = 20 \equiv 3 5 ⋅ 4 = 20 ≡ 3 .
10.6 [계산]
예제 10.15의 RSA(n = 55 n = 55 n = 55 , e = 3 e = 3 e = 3 )로 m = 7 m = 7 m = 7 을 암호화한 c c c 는?
정답 풀이 7 3 = 343 = 55 ⋅ 6 + 13 7^3 = 343 = 55 \cdot 6 + 13 7 3 = 343 = 55 ⋅ 6 + 13 이므로 c = 13 c = 13 c = 13 입니다. 복호화하면 13 27 m o d 55 = 7 13^{27} \bmod 55 = 7 1 3 27 mod 55 = 7 입니다.
10.7 [증명]
정수 a a a 의 각 자리 숫자의 합을 s s s 라 할 때 a ≡ s ( m o d 9 ) a \equiv s \pmod 9 a ≡ s ( mod 9 ) 임을 보입니다. (그래서 “자리 숫자의 합이 9의 배수이면 9의 배수”입니다.)
풀이 a = d k 10 k + ⋯ + d 1 ⋅ 10 + d 0 a = d_k 10^k + \cdots + d_1 \cdot 10 + d_0 a = d k 1 0 k + ⋯ + d 1 ⋅ 10 + d 0 이라 합시다. 10 ≡ 1 ( m o d 9 ) 10 \equiv 1 \pmod 9 10 ≡ 1 ( mod 9 ) 이므로 정리 10.8 로 10 i ≡ 1 10^i \equiv 1 1 0 i ≡ 1 이고, a ≡ d k + ⋯ + d 1 + d 0 = s ( m o d 9 ) a \equiv d_k + \cdots + d_1 + d_0 = s \pmod 9 a ≡ d k + ⋯ + d 1 + d 0 = s ( mod 9 ) 입니다.