オイラーの定理 (数論)（Euler's theorem）、カーマイケルの定理(Carmichael function)

# はじめに

[フェルマーの小定理](https://qiita.com/tnakagawa/items/500db60b3bbe16e7fb30)について投稿しましたが、これをもう少し一般化したオイラーの定理を求めていきます。
さらに、一般化したカーマイケルの定理を示します。

[フェルマーの小定理 - Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A7%E3%83%AB%E3%83%9E%E3%83%BC%E3%81%AE%E5%B0%8F%E5%AE%9A%E7%90%86)
[オイラーの定理 (数論) - Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%82%A4%E3%83%A9%E3%83%BC%E3%81%AE%E5%AE%9A%E7%90%86_(%E6%95%B0%E8%AB%96))
[カーマイケルの定理](https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A7%E3%83%AB%E3%83%9E%E3%83%BC%E3%81%AE%E5%B0%8F%E5%AE%9A%E7%90%86#%E3%82%AB%E3%83%BC%E3%83%9E%E3%82%A4%E3%82%B1%E3%83%AB%E3%81%AE%E5%AE%9A%E7%90%86)

# オイラーのφ関数(Euler's totient function)

オイラーのφ関数(オイラーのトーシェント関数)は、$\varphi(n)$と表します。
正の整数$n$に対して、$1$から$n$までの自然数のうち$n$と互いに素なものの個数を与えます。

[オイラーのφ関数 - Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%82%A4%E3%83%A9%E3%83%BC%E3%81%AE%CF%86%E9%96%A2%E6%95%B0)

# オイラーの定理(Euler's theorem)

$n$を正の整数とする。$n,a$を互いに素である正の整数とする時、以下が成り立ちます。

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

(証明)

$n$と互いに素の数を以下の集合とする。
オイラーのφ関数の定義どおり$\ \varphi(n)\ $個あります。

```math
A = \{ b_1,b_2,\cdots,b_{\varphi(n)} \}
```

これに、$n$と互いに素の数を$a$を乗算します。

```math
B = \{ ab_1,ab_2,\cdots,ab_{\varphi(n)} \}
```

ここで、$ab_i,1\le i \le \varphi(n)\ $を考えます。
$a,b_i$はどちらも$n$と互いに素なので、$ab_i$も$n$と互いに素になります。

$ab_i = nq_i + r_i$ とすれば、[ユークリッドの互除法](https://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC%E3%82%AF%E3%83%AA%E3%83%83%E3%83%89%E3%81%AE%E4%BA%92%E9%99%A4%E6%B3%95)で使った原理より、$r_i\ $も$n$と互いに素になります。
という事は、$ab_i \bmod n$も$n$と互いに素になります。

$ab_i,ab_j,1\le i \le j \le \varphi(n)$ を考えます。
これらの剰余(modulo)は異なります。もし同じであれば$b$も同じになります。

```math
\begin{align*}
& ab_i \equiv ab_j \pmod{n} \\
& b_i \equiv b_j \pmod{n} \\
& b_i = b_j \\
\end{align*}
```

ようするに、集合$B$の各値の剰余(modulo)は集合$A$の値を並べ替えたものとなります。
したがって、集合$A,B$の各値を乗算すると以下の式が成り立ちます。

```math
\begin{align*}
& b_1\times b_2 \times \cdots \times b_{\varphi(n)} \equiv ab_1\times ab_2 \times \cdots \times ab_{\varphi(n)} \pmod{n}\\
& P = b_1\times b_2 \times \cdots \times b_{\varphi(n)} \\
& P \equiv a^{\varphi(n)}P \pmod{n} \\
& 1 \equiv a^{\varphi(n)} \pmod{n} \\
\end{align*}
```

# オイラーのφ関数(Euler's totient function)

互いに素である正の整数$a,b$において以下の式が成り立つ事を証明します。

```math
\varphi(ab) = \varphi(a)\varphi(b)
```

先に補助定理を定めておきます。

(補助定理）
整数$a,b$はともに2以上の整数とします。
$a,b$について、正の整数$n$を$n = ap + r\ ,\ n = bq + s$ ($\ p,q,r,s\ $は整数 $\ 1\le r\le a,1\le s\le b\ $）
と表したときの$r$と$s$の組$(r,s)$を考え、それを$A_n$とします。
このとき互いに素である$a,b$に対して$\ A_1,A_2,A_3,\cdots,A_{ab}$の$ab$個はすべて異なる組であり、
$\ (r,s)\ (1\le r\le a,1\le s\le b)$の1つ1つがちょうど一度ずつ現れます。

(補助定理の証明)
$1\le x\le y\le ab$・・・①である$x,y\ $について、$A_x$と$A_y$は同じ組とします。
このときある整数$\ p,p',q,q',r,s(1\le r\le a,1\le s\le b)$について
$x = ap + r = bp' + s\ ,\ y = aq + r = bq' + s\ $であり
$y − x = a(q − p)\ $かつ $y − x = b(q' − p')$ とします。
$y − x$ は$a$の倍数かつ$b$の倍数であって、$a,b$が互いに素であることから$\ y−x$は$ab$の倍数となります。
しかし①より$\ 0\le y − x\le ab − 1$なので$y − x = 0 , y = x
$です。
以上より$1\le x < y\le ab$であるすべての$x,y$について$A_x,A_y$が異なる組であることが示されましたが、
これから$A_1,A_2,\cdots,A_{ab}$はすべて異なる$ab$組あります。
また、$(r,s)$としてありうるのは定義から$ab$個であるので、この一つ一つがちょうど１度ずつ
$A_1,A_2,\cdots,A_{ab}$において現れることが分かります。

[互除法の原理とオイラー関数の乗法性](http://kynoshoka.com/eulerfunc.pdf)

まず、$1$から$ab$までの正の整数を以下のように並べます。

```math
\begin{array}{lllllll}
 1 & 2 & \cdots & t & \cdots & a-1 & a \\
1+a & 2+a & \cdots & t + a & \cdots & (a-1) + a & 2a \\
\vdots & \vdots & \ddots & \vdots & \ddots & \vdots & \vdots \\
1+a(b-1) & 2+a(b-1) & \cdots & t+a(b-1) & \cdots & (a-1)+a(b-1) & ab \\
\end{array}
```

各列は正の整数$a$において、互いに素でない列は消す事ができます。

```math
\begin{array}{lllllll}
 t_1 & t_2 & \cdots & t_{\varphi(a)} \\
t_1+a & t_2+a & \cdots & t_{\varphi(a)} + a \\
\vdots & \vdots & \ddots & \vdots \\
t_1+a(b-1) & t_2+a(b-1) & \cdots & t_{\varphi(a)}+a(b-1) \\
\end{array}
```

各列の各値は補助定理により異なる組があらわれます。
したがって、各行は正の整数$b$において、互いに素でない列は消す事ができます。

```math
\begin{array}{lllllll}
 t_{11} & t_{21} & \cdots & t_{\varphi(a)1} \\
t_{12}+a & t_{22}+a & \cdots & t_{\varphi(a)t} + a \\
\vdots & \vdots & \ddots & \vdots \\
t_{1\varphi(b)}+a(b-1) & t_{2\varphi(b)}+a(b-1) & \cdots & t_{\varphi(a)\varphi(b)}+a(b-1) \\
\end{array}
```

したがって、互いに素である正の整数$a,b$において以下の式が成り立ちます。

```math
\varphi(ab) = \varphi(a)\varphi(b)
```

$\ p$が素数の時、以下の式が成り立ちます。

```math
\begin{align*}
& \varphi(p) = p-1 \\
& \varphi(p^e) = p^e-p^{e-1} 
\end{align*}
```

$\varphi(p)$の場合、$1$から$\ p$の正の整数で$\ p$の約数は$\ p$だけなので、$\ p-1$個となります。
$\varphi(p^e)$の場合、$\ 1$から$\ p^e$の正の整数で$\ p$の約数は$\ p^e\div p$個なので、$p^e-p^{e-1}$個となります。

整数$\ n$の素因数分解が$n=p_1^{e_1}\times p_2^{e_2}\times \cdots \times p_d^{e_d}$である時、以下の式が成り立ちます。
$\ p_i,1\le i\le d\ $は素数です。

```math
\begin{align*}
n&=p_1^{e_1}\times p_2^{e_2}\times \cdots \times p_d^{e_d} \\
& p_i,1\le i\le d \text{ is prime number.} \\
\varphi(n) &= \varphi(p_1^{e_1})\varphi(p_2^{e_2})\cdots \varphi(p_d^{e_d}) \\
&= (p_1^{e_1}-p_1^{e_1-1})(p_2^{e_2}-p_2^{e_2-1})\cdots (p_d^{e_d}-p_d^{e_d-1}) \\
&= p_1^{e_1}p_2^{e_2}\cdots p_d^{e_d}(1-\frac{1}{p_1})(1-\frac{1}{p_2})\cdots (1-\frac{1}{p_d}) \\
&= n \prod_{k=1}^{d}(1-\frac{1}{p_k}) \\
\end{align*}
```

# まとめ


$n$を正の整数とする。$n,a$を互いに素である正の整数とする時、以下が成り立ちます。

```math
\begin{align*}
& a^{\varphi(n)} \equiv 1 \pmod{n} \\
& n = \prod_{k=1}^{d}p_k^{e_k} \\
& p_i,1\le i\le d \text{ is prime number.} \\
& \varphi(n) = n \prod_{k=1}^{d}(1-\frac{1}{p_k}) \\
\end{align*}
```
互いに素である正の整数$a,b$において以下の式が成り立ちます。

```math
\varphi(ab) = \varphi(a)\varphi(b)
```

# カーマイケルの定理(Carmichael function)

[オイラーのφ関数](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%82%A4%E3%83%A9%E3%83%BC%E3%81%AE%CF%86%E9%96%A2%E6%95%B0)では最小値にならないので、さらに一般化したのが[カーマイケルの定理](https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A7%E3%83%AB%E3%83%9E%E3%83%BC%E3%81%AE%E5%B0%8F%E5%AE%9A%E7%90%86#%E3%82%AB%E3%83%BC%E3%83%9E%E3%82%A4%E3%82%B1%E3%83%AB%E3%81%AE%E5%AE%9A%E7%90%86)です。

### カーマイケルの定理(Carmichael function)

$n$と$a$が互いに素である場合、$a^{\lambda(n)} \equiv 1 \pmod{n}$となる$\lambda(n)$を求めます。

$\ n=2^e$の時、以下の式で表されます。

```math
\lambda (2^e) = \left\{ 
\begin{align*}
&1 & \text{if } e = 1 \\
&2 & \text{if } e = 2 \\
&2^{e-2} & \text{if } e \ge 3 \\
\end{align*}
\right.
```

$\ n=p^e$、$\ p$が奇素数(奇数の素数）の冪乗の時、以下の式で表されます。

```math
\lambda (p^e) = p^{e-1}(p-1)\ 
```

$\ n=p_1^{e_1} \times \cdots \times p_n^{e_n}$、$\ n$が左記の素因数分解される時、以下の式で表されます。

```math
\lambda (n) = \text{lcm}(\lambda(p_1^{e_1}), \ldots , \lambda(p_n^{e_n}))
```

(証明)

証明については、以下を参照願います。
（※：なんとなく理解はできましたが、説明できない・・・、誰か易しい解説をお願いします）

[Carmichael's Lambda Function](https://brilliant.org/wiki/carmichaels-lambda-function/#proof-of-the-formulas)
[カーマイケルのλ関数と絶対擬素数](http://integers.hatenablog.com/entry/2017/06/08/191649)
[巷で話題のカーマイケル数・カーマイケルの定理について](http://tsujimotter.hatenablog.com/entry/carmichael-number)

### なんとなく

$\lambda(n) \le \varphi(n)$である事はわかると思います。
$\ n$が奇素数の冪乗であれば、$\lambda(n) = \varphi(n)$となります。
合成数の場合は、最小公倍数を計算しているので、$\lambda(n)$は$\varphi(n)$の約数となります。

# さいごに

「はじめに」にも書いたとおり、フェルマーの小定理を、一般化したのがオイラーの定理です。
さらに、一般化したのが、カーマイケルの定理です。
暗号をやる上で重要な定理なので、投稿してみました。