GCD는 Division Theorem에서 곧바로 나오는 첫 도구다. 두 수를 나눈 나머지가 공약수 집합을 바꾸지 않는다는 사실 하나로 유클리드 호제법이 서고, 그 과정을 거꾸로 읽으면 베주 항등식이 나온다. 이 둘이 뒤에서 볼 모듈러 역원과 RSA 키 생성의 바탕이 된다.
이 포스트에서 다루는 내용
GCD 대수적 정의: d∣a, d∣b이고, c∣a, c∣b이면 c∣d가 되는 유일한 d≥0
유클리드 호제법: gcd(b,a)=gcd(a,r), 나머지가 0이 될 때까지 반복
확장 유클리드 알고리즘: gcd(a,b)=xa+yb (베주 항등식)
서로소 성질: gcd(a,b)=1⟺ax+by=1인 정수 x,y가 존재
GCD 정의
임의의 정수 a, b에 대해, 최대공약수d=gcd(a,b)는 다음 두 조건을 동시에 만족하는 유일한 정수 d≥0이다.
d∣a 이고 d∣b
모든 정수 c에 대해 c∣a 이고 c∣b 이면, c∣d
두 번째 조건이 핵심이다. 일상적인 정의(“공약수 중 가장 큰 수”)에서는 c≤d를 요구하지만, c∣d는 이보다 정확한 조건이다. c가 d의 약수이면 자동으로 c≤d이기 때문이다.
a와 b가 서로소(coprime) 이면 gcd(a,b)=1이다.
GCD 계산
GCD를 구하는 방법은 크게 두 가지다.
소인수분해(Factorization): 두 수를 각각 소인수분해한 뒤 공통 소인수의 최솟값을 곱한다. 직관적이지만 큰 수에서는 느리다.
느린 이유는 현재 알려진 고전 알고리즘의 실행 시간에 있다. n비트 정수에 대해 가장 빠른 일반 알고리즘인 수체 체(Number Field Sieve)가 준지수 시간 L[1/3]을 쓴다. 다항식 시간 알고리즘은 아직 알려져 있지 않다.
여기서 흔히 인용되는 복잡도 분류는 조심해서 읽어야 한다. 소인수분해 자체는 값을 내놓는 함수 문제라 extNP 같은 판정 클래스에 바로 넣을 수 없다. 「n이 k 이하의 소인수를 갖는가」처럼 판정 문제로 바꾸면 extNP∩extco−NP에 속한다는 것이 알려져 있는데, 이는 오히려 NP-완전일 가능성이 낮다는 신호다. extNP∩extco−NP 소속만으로 어렵다거나 느리다는 결론은 나오지 않는다. 실제 근거는 앞 문단의 실행 시간이다.
유클리드 호제법(Euclidean Algorithm): 나머지 연산을 반복해 빠르게 GCD를 구한다.
b와 a의 공약수 전체를 D1, a와 r의 공약수 전체를 D2라 하자. 두 집합이 같음을 보이면 각 집합의 최댓값도 같으므로 gcd(b,a)=gcd(a,r)이 따라온다.
D1⊆D2: p∈D1이면 p∣b, p∣a. r=b−qa이므로 p∣(b−qa), 즉 p∣r. 따라서 p∣a, p∣r이므로 p∈D2.
D2⊆D1: p∈D2이면 p∣a, p∣r. b=qa+r이므로 p∣b. 따라서 p∣a, p∣b이므로 p∈D1.
두 방향 포함이 성립하므로 D1=D2, 즉 gcd(b,a)=gcd(a,r)이다.
확장 유클리드 알고리즘
유클리드 호제법의 각 단계를 역으로 거슬러 올라가면, GCD를 a와 b의 일차 결합(linear combination) 으로 표현할 수 있다.
rk=rk−2−qkrk−1
rk−1을 다시 rk−3과 rk−2로 표현하고 이 과정을 반복하면,
rk=(1+qkqk−1)rk−2−qkrk−3
최종적으로 rk를 a와 b의 일차 결합으로 나타낼 수 있다.
gcd(a,b)=xa+yb(x,y∈Z)
이것이 베주 항등식(Bézout’s Identity) 이다. x와 y는 a, b에 의존하며 유일하지 않다.
쉽게 말하면
확장 유클리드 알고리즘은 "GCD를 구하는 과정을 거꾸로 되감으면, GCD를 두 원래 수의 덧셈·뺄셈 조합으로 표현할 수 있다"는 뜻이다. 예를 들어 gcd(12,8)=4이면, 4=12×1+8×(−1)처럼 쓸 수 있다. 이 성질이 RSA에서 비밀키를 계산하는 핵심 도구가 된다.
서로소의 성질
성질 1: 서로소 판별 기준
gcd(a,b)=1⟺어떤정수x,y에대해ax+by=1
증명 (⟹): gcd(a,b)=1이면 베주 항등식에 의해 ax+by=1인 x,y가 존재한다.
증명 (⟸): ax+by=1을 만족하는 x,y가 존재한다고 하자. d=gcd(a,b)라 하면 d∣a, d∣b이므로 d∣(ax+by)=1. 따라서 d≤1이고, d≥0이므로 d=1.
성질 2: 서로소와 배수
a∣bc이고gcd(a,b)=1⟹a∣c
증명: gcd(a,b)=1이므로 ax+by=1인 x,y가 존재한다. 양변에 c를 곱하면 acx+bcy=c. bc=ka (가정에서 a∣bc)를 대입하면 acx+kay=c, 즉 a(cx+ky)=c. 따라서 a∣c.
성질 3: 서로소의 곱셈 보존
gcd(a,b)=1이고gcd(a,c)=1⟹gcd(a,bc)=1
증명: gcd(a,b)=1이면 ax1+by1=1, gcd(a,c)=1이면 ax2+cy2=1인 정수들이 존재한다. 두 식을 곱하면,