フェルマーの小定理

数論において、**フェルマーの小定理**（フェルマーのしょうていり、）は、素数の性質についての定理であり、実用としてもRSA暗号に応用されている定理である。

## 概要
p を素数とし、 a を整数とすると、

:a^{p} \equiv a \pmod p

が成立すると言う定理である。また、 p を素数とし、 a を p の倍数でない整数（ a と p は互いに素）とするときに、

:a^{p-1} \equiv 1 \pmod p

が成立する。すなわち、 a の p-1 乗を p で割った余りは 1 である。有名なフェルマーの最終定理と区別するためにあえて「小」定理と称されている。

## 歴史

17世紀の数学者ピエール・ド・フェルマーは完全数や親和数に興味を持っていた。当時でも「 が素数ならば、 は完全数である」というユークリッドの定理や「 と  は、最初の数の第2因子とあとの数の第2因子と第3因子とがすべて素数であるとき、親和数となる」ことが知られていた。この種の数の構成には

や

といった数を素数であるかどうか判定したり素因数分解することが大事であった。

フェルマーはに宛てた1640年10月18日付の手紙で「約数和の基本命題」として
: 「素数  と、幾何数列  等々がどのように与えられても、 を割り切るようなある  に対して、 を  が割り切らなければならない。もし  がこのような  のうちの最小のものの倍数であるならば、 は  をも割り切る。」
と書いた。フェルマーは、証明を持っているが「長くなりすぎるようだと気が引ける」として、例によって書き伝えなかった。

出版された最初の証明は1736年のレオンハルト・オイラーによるものである。ゴットフリート・ライプニッツも1683年以前に証明していたことが彼の手稿からわかっている。

## 証明
3通りの証明を示す。

### 証明(1)
二項定理から、数学的帰納法を用いて証明する方法が簡便である。

補題：「 \left( m+1\right)^{p} を p で割った余りは m^{p}+1 を p で割った余りに等しい。」

（補題の証明）

:(m + 1)^p = m^p + {}_p\mathrm{C}_1 m^{p-1} + {}_p\mathrm{C}_2 m^{p-2} + \dotsb + {}_p\mathrm{C}_{p-1} m + 1（二項定理）

右辺の両端以外の二項係数 {}_p\mathrm{C}_k はすべて p の倍数である。なぜなら、
:{}_p \mathrm{C}_k = \frac{p(p-1) \dotsb (p-k+1)}{k (k-1) \dotsb 1}
であり、 p は素数であって k なので、分子に含まれる p が約分されることはないからである。

したがって、 \left( m+1\right)^{p} を p で割った余りは、両端の項 m^{p}+1 を p で割った余りに等しい。（補題の証明終）

命題「 a^{p}\equiv a\pmod{p} 」を、 a についての数学的帰納法で証明する。

補題に m=1 を代入すると、 2^{p}=\left( 1+1\right)^{p} を p で割った余りは 1^{p}+1=2 となり、 a=2 のとき成り立つ。

命題が、 a=k のとき成り立つと仮定する。

補題から、 \left( k+1\right)^{p} を p で割った余りは k^{p}+1 を p で割った余りに等しい。帰納法の仮定によって k^{p} を p で割った余りは k を p で割った余りに等しいから、 \left( k+1\right)^{p} を p で割った余りは k+1 を p で割った余りに等しい。

したがって、命題は a=k+1 のときも成り立つ。

数学的帰納法によって、命題は a\geqq 2 に対して成り立つ。また、 a=0,\ 1 のときは、代入してみると明らかに成り立つので、命題は a\geqq 0 に対して成り立つ。

（証明終）

### 証明(2)
上の補題と同様に、(x+y)^p \equiv x^p + y^p \pmod p が示せる。これより、

:\begin{align}
a^p &= [1+(a-1)]^p \\
&\equiv 1^p + [1+(a-2)]^p \\
&\equiv 1 + 1^p + [1+(a-3)]^p \\
&\equiv a \pmod p
\end{align}

（証明終）

### 証明(3)
p を素数とし、 a と p が互いに素とするときに、

:a^{p-1} \equiv 1 \pmod p

が成立することを、ここで証明する。

集合 \left\{ 1,\ 2,\ 3,\ldots ,\ p-1\right\} は、全体として法 p の下で \left\{ a,\ 2a,\ 3a,\ldots ,\ \left( p-1\right)a\right\} と合同である。（背理法による証明）もし後者の集合内に

:ia \equiv ja \pmod p

となる i,\ j (ただし、 i\neq j )が存在したとする。すると、 a と p が互いに素なので、 i\equiv j\pmod{p} となり、 0 であることから、 i=j となり、矛盾する。したがって、二つの集合は全体として合同であることが分かった。

それぞれの集合の要素をすべて掛け合わせると、

:(p-1)! \equiv (p-1)! \  a^{p-1} \pmod p
となる。 p が素数であることから、 p と \left( p-1\right)! とは互いに素なので、

:a^{p-1}\equiv 1\pmod{p}

（証明終）

## 性質
フェルマーの小定理は、乱数を発生する用途に使われることがある。しかし、このような場合、あらゆる（p と互いに素な）a について、
: b = a^n \pmod p 
が、n= 1 .. p-1  に沿って
: 1 \leq b  
の全要素を順繰りに巡ることを保証しているわけではない点には注意すべきである。実際、次の各表では、n=p-1 である右端の列が全てゼロになることは確かだが、それ以外にもゼロは出現している。

p=3 の場合：

p=5 の場合：

p=7 の場合：

p=11 の場合：

p=13 の場合：

## オイラーの定理

後になってレオンハルト・オイラーはこの定理を拡張し、 a を n と互いに素な整数とすると、

:a^{\varphi(n)}\equiv 1\pmod{n}

が成り立つことを示した。ここで、\varphi(n) は n 以下の n と互いに素な自然数の個数を表し、*[[オイラー関数]]*と呼ばれる。

特に n が素数のときは、\varphi(n)=n-1 より、フェルマーの小定理に一致する。

## カーマイケルの定理
m=\varphi(n) とすれば、 a^{m}\equiv 1\pmod{n} が n と互いに素なすべての a に対して成り立つが、 \varphi(n) はこの性質を満たす m の最小の数とは限らない。カーマイケルの定理はオイラーの定理を精緻化したもので、すべての a に対してa^{m}\equiv 1\pmod{n}が成立するような最小の m を与える。ただし、n と互いに素なaが与えられたときに、 a^{m}\equiv 1\pmod{n} を満たす最小のmは、\lambda \left( n\right) となるとは限らない。

たとえば、n=10000 のとき、カーマイケルの定理によれば n と互いに素なすべての aに対して a^{m}\equiv 1\pmod{n} を満たす最小の m は500であるが、特定の a=7 に対しては 7^{100}\equiv 1\pmod{n}　が成立する。

 \lambda \left( n\right) を以下のように再帰的に定義する。

n=2^{e} なら、
:\lambda (2^e )=\begin{cases}
1 &(e=1)\\
2 &(e=2)\\
2^{e-2} &(e \ge 3)
\end{cases}
n が奇素数 p を用いて n=p^{e} と書けるなら、
:\lambda(p^e) = p^{e-1}(p-1)

n が p_{1}^{e_{1}}\ldots p_{k}^{e_{k}} と素因数分解できるなら、
:\lambda(p_1^{e_1} \dotsb p_k^{e_k}) = \operatorname{lcm} \{ \lambda(p_1^{e_1}), \dotsc, \lambda(p_k^{e_k}) \}

ここで \operatorname{lcm} は最小公倍数。 

カーマイケルの定理は、 a と n が互いに素なとき、
:a^{\lambda \left( n\right)}\equiv 1\pmod{n}
が成り立つという定理である。

\lambda \left( n\right) が n-1 の約数であるとき、 n はカーマイケル数と呼ばれ、自身と互いに素であるようなすべての底でフェルマーテストを通過する絶対擬素数となる。

## フェルマーテスト
**フェルマーテスト**は、フェルマーの小定理の対偶を用いて確率的素数判定を行うアルゴリズムである。

フェルマーの小定理の対偶をとると、これは次のように、自然数 *n* が合成数であるための十分条件を与える。
;対偶
:n と互いに素な整数 a が 
::a^{n-1} \not\equiv 1\pmod{n}
:を満たせば、 n は合成数である。
この十分条件を用いて、次のように自然数 n の素数判定を行う。
#パラメータとして、 2 以上 n 未満の自然数 a を1つ定める。
#a と n が互いに素でなければ「 n は合成数」と出力して終了。
#a^{n-1} \not\equiv 1\pmod{n} ならば「 n は合成数」と出力して終了する。そうでないとき「 n は確率的素数」と出力して終了する。
フェルマーテストが「合成数」と出力したとき、上のフェルマーの小定理の対偶によって n は実際に合成数である。しかし、上の対偶は十分条件を与えるのみで必要条件を与えるものではないので、「確率的素数」と出力された場合でも n は実際に素数であるとは限らない。素数ではないにもかかわらず「確率的素数」と判定されてしまう合成数は**擬素数**と呼ばれる。

疑わしければ、「確率的素数」と出力された場合にはまた異なる a を用いて再びテストを行う。十分な回数だけ a を取り替えて繰り返せば、フェルマーテストが「確率的素数」と判定した数は実際に素数である可能性が高い。

しかし、カーマイケル数または絶対擬素数と呼ばれる "反例" もある。カーマイケル数は合成数であるにもかかわらず、ほとんどいかなる a を用いても「確率的素数」と判定されてしまう。従って、フェルマーテストは完全な素数判定法ではない。

フェルマーテストを改善するアルゴリズムとしては、ミラー–ラビン素数判定法やAKS素数判定法がある。

## 一般化
フェルマーの小定理・オイラーの定理は一般の有限群の定理に拡張できる。 G を位数 m の有限群とすると、 G の任意の元 g に対して g^{m} は単位元に一致する。オイラーの定理は G が乗法群 \left( \mathbb{Z}/n\mathbb{Z}\right)^{\times} のときの場合であり、フェルマーの小定理はさらに n が素数の場合である。

## 出典

## 参考文献
*
*
**
* 
* 

## 外部リンク
*
*
*
*