[정수론 입문 시리즈 15편] 합동, 거듭제곱, 그리고 페르마의 소정리

컴퓨터가 21000mod72^{1000} \bmod 7을 계산할 때 정말 22를 1000번 곱할까요? 사실 답은 작은 반복 패턴만 보면 금방 나옵니다. 예를 들어 231(mod7)2^3\equiv1\pmod7이라서 지수를 크게 줄일 수 있습니다.

이번 글에서는 이런 아이디어를 소수 mod에서 정리한 페르마의 소정리를 봅니다. 암호, 해시, 큰 수 계산에서도 자주 쓰이는 “거듭제곱을 작게 줄이는 법”입니다.

What this post covers

  • 소수 법에서 거듭제곱표가 보이는 규칙성을 관찰합니다.
  • 페르마의 소정리의 정확한 내용을 정리합니다.
  • 페르마의 소정리가 큰 거듭제곱 계산을 어떻게 줄여 주는지 확인합니다.
  • 정리의 증명 아이디어인 “곱하기가 나머지들을 재배열한다”는 관점을 설명합니다.
  • 페르마의 소정리가 합성수 판별에 어떻게 쓰일 수 있는지 봅니다.

이번 글에서 새로 나오는 용어

  • 페르마의 소정리 (Fermat's Little Theorem): 소수 ppa≢0(modp)a\not\equiv 0\pmod p인 정수 aa에 대해 ap11(modp)a^{p-1}\equiv 1\pmod p가 성립한다는 정리입니다.
  • 소수 (Prime Number): 1과 자기 자신만을 약수로 가지는 1보다 큰 자연수입니다.
  • 합동 (Congruence): 같은 나머지를 가지는 관계입니다.
  • 계승 (Factorial): 123n1\cdot2\cdot3\cdots nn!n!로 쓰는 표기입니다.

실험: mod 5에서 거듭제곱표 보기

먼저 작은 표부터 봅시다. 소수 p=5p=5에서 정수 a=0,1,2,3,4a=0,1,2,3,4의 거듭제곱을 계산하면 다음과 같습니다.

a a^1 mod 5 a^2 mod 5 a^3 mod 5 a^4 mod 5 a^5 mod 5
0 0 0 0 0 0
1 1 1 1 1 1
2 2 4 3 1 2
3 3 4 2 1 3
4 4 1 4 1 4

0의 거듭제곱을 제외하면 a41(mod5)a^4\equiv1\pmod5입니다. 즉 5의 배수가 아닌 수들은 4번 거듭제곱하면 나머지가 1로 돌아옵니다.

비슷하게 p=7p=7일 때는 0이 아닌 나머지들에 대해 a61(mod7)a^6\equiv1\pmod7이 됩니다. 더 큰 소수 p=11p=11에 대해서도 같은 현상을 확인할 수 있습니다.

1101,2101,3101,,10101(mod11).1^{10}\equiv1, \quad 2^{10}\equiv1, \quad 3^{10}\equiv1, \quad\dots\quad, 10^{10}\equiv1 \pmod {11}.

이 관찰을 바탕으로 다음과 같은 추측을 세울 수 있습니다.

소수 pp에 대해, 1a<p1\le a<p이면 ap11(modp)a^{p-1}\equiv1\pmod p이다.

사실 aa11p1p-1 사이의 수로 제한할 필요는 없습니다. aapp의 배수가 아니기만 하면 됩니다.

이론 정리: 페르마의 소정리

정리 9.1. 페르마의 소정리

pp가 소수이고, a≢0(modp)a\not\equiv0\pmod p인 정수 aa에 대해

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

가 성립합니다.

이 정리는 1640년경 페르마가 프레니클 드 베시에게 보낸 편지에서 처음 언급했지만, 페르마는 증명을 제시하지 않았습니다. 처음 알려진 증명은 라이프니츠의 증명으로 보입니다.

왜 이 정리가 강력할까?

페르마의 소정리는 매우 큰 수에 대한 합동을 작은 소수 하나로 확인하게 해 줍니다.

예를 들어 220(mod7)2^{20}\pmod7을 봅시다. 직접 큰 수를 만들지 않아도, 7이 소수이고 2≢0(mod7)2\not\equiv0\pmod7이므로

261(mod7)2^6\equiv1\pmod7

입니다. 20=63+220=6\cdot3+2이므로

220=(26)3221344(mod7)2^{20}=(2^6)^3\cdot2^2\equiv1^3\cdot4\equiv4\pmod7

입니다.

예시 1. 233(mod7)2^{33}\pmod 7

페르마의 소정리에 의해

261(mod7)2^6\equiv1\pmod7

입니다. 또

33=65+333=6\cdot5+3

이므로

233=265+3=(26)5231581(mod7)2^{33}=2^{6\cdot5+3}=(2^6)^5\cdot2^3 \equiv1^5\cdot8 \equiv1\pmod7

입니다.

큰 거듭제곱을 직접 계산하지 않고, 지수를 p1p-1로 나누어 줄인 셈입니다.

예시 2. 3100(mod11)3^{100}\pmod {11}

이번에는 3100(mod11)3^{100}\pmod {11}을 계산해 봅시다. 11은 소수이고 3≢0(mod11)3\not\equiv0\pmod {11}이므로

3101(mod11)3^{10}\equiv1\pmod {11}

입니다. 그런데 100=1010100=10\cdot10이므로

3100=(310)101101(mod11)3^{100}=(3^{10})^{10}\equiv1^{10}\equiv1\pmod {11}

입니다. 큰 거듭제곱을 직접 계산하지 않고, 지수를 p1p-1로 나누어 줄인 셈입니다.

합성수 판별에 쓰기

페르마의 소정리는 어떤 수가 소수가 아님을 보여 주는 데도 사용할 수 있습니다. 만약 nn이 소수라면, a≢0(modn)a\not\equiv0\pmod naa에 대해 an11(modn)a^{n-1}\equiv1\pmod n이어야 합니다.

따라서 어떤 aa에 대해 이 합동이 깨지면 nn은 반드시 합성수입니다. 작은 예로 n=15n=15를 봅시다. 만약 15가 소수라면 2141(mod15)2^{14}\equiv1\pmod {15}여야 합니다. 하지만

214=163844(mod15)2^{14}=16384\equiv4\pmod {15}

이므로 15는 소수가 아니라는 사실을 확인할 수 있습니다. Python에서는 더 큰 수도 같은 방법으로 빠르게 검사할 수 있습니다.

다만 주의할 점도 있습니다. 페르마의 소정리는 “소수이면 이 합동이 성립한다”는 명제입니다. 반대로 어떤 밑 aa에 대해 an11(modn)a^{n-1}\equiv1\pmod n이 성립한다고 해서 nn이 반드시 소수라고 결론내릴 수는 없습니다.

Common mistakes

1. 법이 소수인지 확인하지 않는 실수

페르마의 소정리는 소수 pp에 대한 정리입니다. 합성수 법에서는 같은 결론이 일반적으로 성립하지 않습니다.

2. aapp의 배수인 경우까지 그대로 적용하는 실수

정리의 조건은 a≢0(modp)a\not\equiv0\pmod p입니다. a0(modp)a\equiv0\pmod p이면 ap10(modp)a^{p-1}\equiv0\pmod p이지 1이 아닙니다.

3. “페르마 테스트를 통과하면 소수”라고 결론내리는 실수

페르마의 소정리를 이용해 합성수임을 보일 수는 있지만, 한 번의 합동이 성립한다고 해서 소수임이 증명되는 것은 아닙니다.

더 깊이 보기 (선택)

페르마의 소정리가 왜 성립하는지 조금 더 엄밀하게 보고 싶은 학생만 읽어도 됩니다. 핵심은 “곱하기는 나머지들을 재배열한다”는 생각입니다.

도우미 정리 9.2

pp가 소수이고 a≢0(modp)a\not\equiv0\pmod p라고 합시다. 그러면

a,2a,3a,,(p1)a(modp)a,2a,3a,\dots,(p-1)a\pmod p

1,2,3,,p1(modp)1,2,3,\dots,p-1\pmod p

의 재배열입니다.

왜 그럴까요? iaja(modp)ia\equiv ja\pmod p라고 가정하면 p(ij)ap\mid(i-j)a입니다. 그런데 pp는 소수이고 pap\nmid a이므로 p(ij)p\mid(i-j)입니다. 1i,jp11\le i,j\le p-1에서는 이것이 i=ji=j일 때만 가능합니다.

따라서 a,2a,,(p1)aa,2a,\dots,(p-1)a는 0이 아닌 서로 다른 나머지 p1p-1개를 모두 한 번씩 나타냅니다. 즉 1,2,,p11,2,\dots,p-1의 재배열입니다.

이제 두 목록의 모든 항을 곱하면

a(2a)(3a)((p1)a)123(p1)(modp)a\cdot(2a)\cdot(3a)\cdots((p-1)a) \equiv 1\cdot2\cdot3\cdots(p-1) \pmod p

입니다. 왼쪽의 aa들을 모으면

ap1(p1)!(p1)!(modp)a^{p-1}(p-1)!\equiv(p-1)!\pmod p

가 됩니다. (p1)!(p-1)!pp와 서로소이므로 양변에서 나눌 수 있고,

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

를 얻습니다. 이것이 페르마의 소정리입니다.

연습 문제

아래 점검 퀴즈에서 페르마의 소정리를 직접 적용해 보세요.

15장 점검 문제: 페르마 소정리

페르마 소정리의 조건, 거듭제곱 계산, 소수 판정 아이디어를 확인합니다.

QUIZ
문제 1 / 10 풀이 완료 0 / 10
풀이 진행 0 / 10 0%
현재 문제 정답 오답 미풀이
문제 1 5지선다 미풀이
[쉬움] 2^4\bmod 5의 값은?
현재 점수 0점 · 정답 수 0/10

Wrap-up

이번 글에서는 Silverman 9장의 흐름에 따라 소수 법에서 거듭제곱표를 관찰하고, 그 규칙성이 페르마의 소정리로 정리되는 과정을 살펴보았습니다. 핵심 아이디어는 aa를 곱하는 것이 0이 아닌 나머지들을 재배열한다는 것입니다.

다음 글에서는 오일러 피 함수오일러 정리를 보며, 페르마의 소정리가 일반적인 법에서 어떻게 넓어지는지 정리하겠습니다.

💬 댓글

이 글에 대한 의견을 남겨주세요