[정수론 입문 시리즈 16편] 페르마 소정리는 왜 거듭제곱 계산을 단순하게 만들까?

English version

중국인의 나머지 정리까지 오면 합동식의 기본 도구는 어느 정도 갖추게 됩니다. 이제는 모듈러 세계에서 큰 거듭제곱을 빠르게 다루는 정리를 볼 차례입니다. 그 출발점이 페르마 소정리입니다.

What this post covers

  • 페르마 소정리의 내용을 설명합니다.
  • 왜 소수 mod에서 거듭제곱이 특별한 패턴을 보이는지 감각을 잡습니다.
  • 간단한 예시로 큰 거듭제곱의 나머지를 빠르게 구합니다.
  • 다음 글의 오일러 정리로 자연스럽게 이어집니다.

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

  • 페르마 소정리 (Fermat's Little Theorem): 소수 pppp의 배수가 아닌 정수 aa에 대해 ap11(modp)a^{p-1} \equiv 1 \pmod p가 성립한다는 정리입니다.
  • 소수 (Prime Number): 1과 자기 자신만을 약수로 가지는 1보다 큰 자연수입니다.
  • 합동 (Congruence): 같은 나머지를 가지는 관계입니다.
  • 오일러 정리 (Euler's Theorem): 페르마 소정리를 일반 mod로 확장한 정리입니다.

페르마 소정리의 내용

소수 pppp의 배수가 아닌 정수 aa에 대해

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

가 성립합니다.

또는 같은 내용을 다음처럼도 자주 씁니다.

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

두 형태는 서로 연결되어 있습니다. 다만 입문 단계에서는 조건을 구분해 기억하는 것이 좋습니다.

  • ap11(modp)a^{p-1} \equiv 1 \pmod p 형태는 pap \nmid a일 때 쓰고
  • apa(modp)a^p \equiv a \pmod p 형태는 모든 정수 aa에 대해 성립하는 버전으로 볼 수 있습니다.

왜 이 정리가 유용할까?

이 정리는 매우 큰 거듭제곱의 나머지를 줄이는 데 강력합니다. 소수 mod에서는 일정한 주기가 생기기 때문입니다.

예를 들어 mod 7에서는

a61(mod7)a^6 \equiv 1 \pmod 7

aa가 7의 배수가 아닐 때 성립합니다. 그러면 a100a^{100} 같은 큰 지수도 6으로 나눈 나머지를 이용해 줄일 수 있습니다.

예시 1. 3100(mod7)3^{100} \pmod 7

페르마 소정리에 의해

361(mod7)3^6 \equiv 1 \pmod 7

입니다.

100을 6으로 나누면

100=6×16+4100 = 6 \times 16 + 4

이므로

3100=(36)16×34116×34814(mod7)3^{100} = (3^6)^{16} \times 3^4 \equiv 1^{16} \times 3^4 \equiv 81 \equiv 4 \pmod 7

입니다.

직접 큰 수를 계산할 필요 없이 지수를 줄일 수 있습니다.

예시 2. 230(mod5)2^{30} \pmod 5

5는 소수이므로

241(mod5)2^4 \equiv 1 \pmod 5

입니다.

30=4×7+230 = 4 \times 7 + 2

이므로

230=(24)7×2217×44(mod5)2^{30} = (2^4)^7 \times 2^2 \equiv 1^7 \times 4 \equiv 4 \pmod 5

입니다.

이 정리의 조건을 꼭 봐야 한다

페르마 소정리는 아무 mod에서나 쓰는 정리가 아닙니다.

  • pp는 소수여야 하고
  • aapp의 배수가 아니어야 합니다.

예를 들어 mod 8에서는 일반적으로 a71a^7 \equiv 1 같은 식을 그대로 기대하면 안 됩니다. 그 경우는 다음 글의 오일러 정리처럼 더 일반적인 틀에서 봐야 합니다.

Common mistakes

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

페르마 소정리는 소수 mod에서의 정리입니다.

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

조건을 만족하지 않으면 ap11(modp)a^{p-1} \equiv 1 \pmod p를 바로 쓸 수 없습니다.

3. 지수를 줄이면서 나머지 계산을 끝까지 정리하지 않는 실수

지수만 줄이고 마지막 작은 거듭제곱 계산에서 실수하는 경우가 많습니다.

Wrap-up

이번 글에서는 페르마 소정리를 통해 소수 mod에서 큰 거듭제곱의 나머지를 빠르게 줄이는 방법을 정리했습니다.

다음 글에서는 이 생각을 일반 mod로 확장하는 오일러 피 함수오일러 정리를 살펴보겠습니다.

💬 댓글

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