Fermat's Little Theorem — 페르마의 소정리

소수는 ‘나누어지지 않는다’는 단순한 성질을 갖지만, 모듈러 산술 위에서는 놀라운 주기성을 만들어낸다. a를 소수 p번 거듭제곱하면 반드시 a 자신으로 돌아온다 — 이 필연성이 RSA 암호를 가능하게 한다.

이 글의 주요 개념
  • 페르마의 소정리: p가 소수이고 gcd(a, p) = 1이면 a^(p−1) ≡ 1 (mod p)
  • 동치 형태: 모든 정수 a에 대해 a^p ≡ a (mod p)
  • 모듈러 역원: a^(−1) ≡ a^(p−2) (mod p)
  • 페르마 소수 판별법: a^(n−1) ≢ 1 (mod n)이면 n은 합성수
  • 한계: Carmichael 수 — 합성수이지만 모든 a에 대해 테스트를 통과하는 예외

정리의 두 형태

형태 1 (기본형): pp가 소수이고 gcd(a,p)=1\gcd(a, p) = 1이면,

ap11(modp)a^{p-1} \equiv 1 \pmod{p}

형태 2 (일반형): pp가 소수이면 모든 정수 aa에 대해,

apa(modp)a^p \equiv a \pmod{p}

두 형태는 동치이다. 형태 1에서 양변에 aa를 곱하면 형태 2가 나오고, 형태 2에서 pap \nmid a일 때 aa로 나누면 형태 1이 복원된다. pap \mid a인 경우 형태 2는 00(modp)0 \equiv 0 \pmod{p}으로 자명하다.

증명 1 — 오일러 정리의 특수화

소수 pp에 대해 ϕ(p)=p1\phi(p) = p - 1이다 (11부터 p1p-1까지 모두 pp와 서로소).

오일러 정리 aϕ(m)1(modm)a^{\phi(m)} \equiv 1 \pmod{m}m=pm = p를 대입하면 즉시 얻어진다.

증명 2 — 곱셈군 이중 치환

gcd(a,p)=1\gcd(a, p) = 1일 때, 집합 S={1,2,,p1}S = \{1, 2, \ldots, p-1\}을 고려한다.

SS의 각 원소에 aa를 곱한 집합 aS={a,2a,,(p1)a}aS = \{a, 2a, \ldots, (p-1)a\}mod p\bmod\ p로 환산하면:

  • iamodpia \bmod p00이 아니다 (gcd(a,p)=1\gcd(a, p) = 1이고 1ip11 \leq i \leq p-1이므로)
  • ia≢ja(modp)ia \not\equiv ja \pmod{p} (iji \neq j일 때) — aa가 역원을 가지므로 소거 가능

따라서 aSmodpaS \bmod p의 원소들은 {1,2,,p1}\{1, 2, \ldots, p-1\}의 재배열이다. 두 집합의 모든 원소를 곱하면,

a2a3a(p1)a123(p1)(modp)a \cdot 2a \cdot 3a \cdots (p-1)a \equiv 1 \cdot 2 \cdot 3 \cdots (p-1) \pmod{p} ap1(p1)!(p1)!(modp)a^{p-1} \cdot (p-1)! \equiv (p-1)! \pmod{p}

gcd((p1)!,p)=1\gcd((p-1)!, p) = 1이므로 양변에서 (p1)!(p-1)!을 소거하면,

ap11(modp)a^{p-1} \equiv 1 \pmod{p}
쉽게 말하면

오일러 정리와 페르마의 소정리는 "모듈러 세계에서 거듭제곱은 결국 원점으로 돌아온다"는 것이다. 소수 p에 대해 어떤 수를 (p-1)번 거듭제곱하면 반드시 1로 돌아온다. RSA는 이 주기성을 이용해 암호화한 메시지를 정확히 원래대로 복원한다.

예시

페르마의 소정리 — p=7에서 a^k mod 7 순환표

p=7p = 7에서 Z7={1,2,3,4,5,6}\mathbb{Z}_7^* = \{1,2,3,4,5,6\}의 각 원소는 고유한 순환 주기를 갖지만, k=p1=6k = p - 1 = 6에서 반드시 11로 수렴한다.

몇 가지 직접 계산:

26=64=9×7+1    261(mod7)2^6 = 64 = 9 \times 7 + 1 \implies 2^6 \equiv 1 \pmod{7} 3101(mod11)(p=11, p1=10)3^{10} \equiv 1 \pmod{11} \quad (p = 11,\ p-1 = 10) 5121(mod13)(p=13, p1=12)5^{12} \equiv 1 \pmod{13} \quad (p = 13,\ p-1 = 12)

응용 1 — 모듈러 역원

gcd(a,p)=1\gcd(a, p) = 1이면 ap11a^{p-1} \equiv 1에서,

aap21(modp)a \cdot a^{p-2} \equiv 1 \pmod{p}

따라서 aa의 모듈러 역원은 a1ap2(modp)a^{-1} \equiv a^{p-2} \pmod{p}이다.

확장 유클리드 알고리즘 없이도 빠른 모듈러 지수연산(Fast Exponentiation)만으로 역원을 구할 수 있다. 예를 들어 31(mod7)=35mod7=243mod7=53^{-1} \pmod{7} = 3^5 \bmod 7 = 243 \bmod 7 = 5. 검증: 3×5=151(mod7)3 \times 5 = 15 \equiv 1 \pmod{7}

응용 2 — 페르마 소수 판별법 (Fermat Primality Test)

nn이 소수이면 an11(modn)a^{n-1} \equiv 1 \pmod{n}이 성립한다. 대우명제: 이 합동이 성립하지 않으면 nn은 합성수 이다.

절차: 랜덤하게 aa (1<a<n1 < a < n)를 선택해 an1modna^{n-1} \bmod n을 계산한다.

  • an1≢1a^{n-1} \not\equiv 1nn은 합성수 (확정)
  • an11a^{n-1} \equiv 1nn이 소수일 가능성이 높음 (확정 아님)

여러 aa에 대해 반복할수록 소수 판정의 신뢰도가 높아진다.

한계 — Carmichael 수

합성수임에도 모든 gcd(a,n)=1\gcd(a, n) = 1aa에 대해 an11(modn)a^{n-1} \equiv 1 \pmod{n}을 만족하는 수가 존재한다. 이를 Carmichael 수(카마이클 수) 라 한다.

가장 작은 예: n=561=3×11×17n = 561 = 3 \times 11 \times 17

a5601(mod561)for all gcd(a,561)=1a^{560} \equiv 1 \pmod{561} \quad \text{for all } \gcd(a, 561) = 1

Carmichael 수 때문에 페르마 테스트 단독으로는 소수를 완전히 판별할 수 없다. 실용적인 소수 판별에는 밀러-라빈 테스트(Miller-Rabin) 를 사용한다.

핵심 정리
  • a^(p-1) ≡ 1 (mod p)는 오일러 정리의 특수화이자, 집합 {1,...,p-1}이 곱셈에 대한 군(group)임을 반영한다.
  • 모듈러 역원 a^(−1) ≡ a^(p−2)는 확장 유클리드 없이 지수연산만으로 역원을 구하는 실용적 공식이다.
  • 페르마 소수 판별법은 확률적 테스트다 — Carmichael 수라는 반례가 존재하므로 단독으로 완전한 증명이 되지 않는다.
  • RSA에서 복호화 정확성(m^(de) ≡ m (mod n))은 페르마의 소정리(혹은 오일러 정리)에 직접 의존한다.
다음 포스트

Chinese Remainder Theorem — 중국인의 나머지 정리 — 서로소인 여러 모듈러스의 연립 합동식이 항상 유일한 해를 가짐을 증명하고, RSA-CRT 속도 최적화까지 다룬다.

© 2026 XsQuare01. Powered by GitHub Pages.