Fermatの小定理 Eulerの定理 Carmichaelの定理
競技プログラミングでは を用いた数え上げ問題が頻出します。このとき途中で割り算を用いますが、計算途中のオーバフローを避けるためモジュラ逆数というものを使いますが、このモジュラ逆数はFermat*1の小定理やEuler*2の定理といったものを利用して計算されていたりします。
他にも整数の性質を用いた問題ではこれらの定理を背景として作られる問題もあります。今回はこれらの定理について必要な前提知識とともに解説っぽいことをしていきたいと思います。また、これらの定理は $$
a^{f(n)} \equiv 1 \pmod{n}
$$ という形をしていますが、 のときにしか用いることができません。これを のときについても使えるように一般化したものについてはこちらの記事を参考にしてください。
前提知識
Eulerのトーシェント函数
Eulerのトーシェント函数は と互いに素であるような 以下の正整数の個数を与える函数 です。
が有限の自然数からなる集合 を用い、 を 番目の素数として $$
n = \prod_{i \in S} {p_i}^{e_i}\hspace{2em} (\forall i \in S,\ e_i \geq 1)
$$ と素因数分解されるとき、
$$
\varphi(n) = \prod_{i \in S} ({p_i}^{e_i} - {p_i}^{e_i - 1}) = n \prod_{i \in S} \left( 1 - \frac{1}{p_i} \right)
$$ となります。この公式の証明についてはこちらにあります。
Fermatの小定理
かの有名なFermatの最終定理と区別するため「小定理」という名前がついています。
素数 と の倍数でない整数 について
が成り立つ証明
証明方法はいくつかありますが、そのうち1つの方法で証明します。
であるため となります。
よって は を法として と合同となる、すなわち、 を で割った余りはすべて異なります。このことから
$$
\prod_{i = 1}^{p - 1} ia = a^{p - 1} (p - 1)! \equiv \prod_{i = 1}^{p - 1} i = (p - 1)! \pmod{p}
$$ となり、 は と互いに素であるため、両辺を で割ることができ、 を得ることができます。
Eulerの定理
Fermatの小定理を法が素数でない場合に拡張しましょう。
互いに素な2整数 について
が成立する証明
Fermatの小定理とほぼ同じように証明できます。
であるため となります。
以下の と互いに素な 個の正整数 についてそれぞれ を掛けた を で割った余りはそれぞれ異なり、また全て と互いに素であるため、
$$
\prod_{i = 1}^{\varphi(n)} am_{i} = a^{\varphi(n)} \prod_{i = 1}^{\varphi(n)} m_{i} \equiv \prod_{i = 1}^{\varphi(n)} m_{i} \pmod{n}
$$ となりますが、 は と互いに素であるため、 とできます。
周期と原始根
Eulerの定理より より の累乗の余りの周期は であることが分かります。このことは と互いに素であればどんな についても成り立ちます。しかし全ての で最小の周期が となる訳ではありません。例えば とすると $$\begin{align}
&1: 1 \rightarrow \cdots
\\&2: 2 \rightarrow 4 \rightarrow 1 \rightarrow \cdots
\\&3: 3 \rightarrow 2 \rightarrow 6 \rightarrow 4 \rightarrow 5 \rightarrow 1 \rightarrow \cdots
\\&4: 4 \rightarrow 2 \rightarrow 1 \rightarrow \cdots
\\&5: 5 \rightarrow 4 \rightarrow 6 \rightarrow 2 \rightarrow 3 \rightarrow 1 \rightarrow \cdots
\\&6: 6 \rightarrow 1 \rightarrow \cdots
\end{align}$$ となり、 のときは最小周期が となりますが、その他の時は最小周期は にはなりません。一般に最小周期が となるような (正確にはそれを で割ったもの) を を法とした原始根と言い、 を で割った余りには 以下の と互いに素な数が1度ずつ出てきます。
原始根でない の最小周期、すなわち となる最小の は の約数になります。それを背理法で示します。
もしも最小周期が の約数でない であるとします。 で の両辺を割ることで を得ます。この操作を繰り返すことで を で割った余りを として となりますが、このとき であるため、 の最小性に反します。よって最小周期は の約数でなければならないことが分かりました。
原始根ですが全ての について存在するわけではありません。 のとき
$$\begin{align}
1&: 1 \rightarrow \cdots
\\5&: 5 \rightarrow 1 \rightarrow \cdots
\\7&: 7 \rightarrow 1 \rightarrow \cdots
\\11&: 11 \rightarrow 1 \rightarrow \cdots
\end{align}$$ となりますが、 であるため、原始根が存在しません。
Carmichaelの定理
実はEulerの定理は必ずしも と互いに素な について となるような最小の を与えるものではありません。これに対してCarmichaelの定理は最適化したもので、最小の を与えます。
互いに素な2整数 について
が成立する全ての と互いに素な について を で割った余りの最小周期は の約数となる
最小周期が となるような が必ず存在する
また、全ての と互いに素な についての最小周期が の約数になることについての証明は、上側の主張 を認めれば、Eulerのものの を に置き換えるだけでOKです。
Fermatテスト
Fermatの小定理の対偶をとると
3.で素数でなく確率的素数となるのはFermatの小定理の対偶は が合成数であることの十分条件に過ぎないからです。つまり、素数でなくとも3.まで通過することがあるわけです。確率的素数であるような合成数を擬素数と言います。今回はFermatテストであるためFermat擬素数と呼ばれます。
モジュラ逆数
法 での のモジュラ逆数とは
$$
ax \equiv 1 \pmod{n}
$$ となるような (を で割った余り)のことです。普通の逆元と同じように と表記します。
と が互いに素でないときはこのような が存在しないため、モジュラ逆数は存在しません。
と が互いに素な時、Eulerの定理より*5
より となります。
因みに余談ですがモジュラ逆数はBézout*6の等式 の解であるため拡張Εὐκλείδης*7の互除法によっても求めることができます。