【旧文/OI】乘法逆元,欧拉函数与莫比乌斯函数
本博客源自我的洛谷博客 https://www.luogu.com.cn/article/2xq9k7z8 和 https://www.luogu.com.cn/article/n2wot8r1 (现在改成专栏了),写作时间 2021-08-18 00:40/2021-09-26 20:53
对于本篇文章,看这个就够了: https://oi-wiki.org/math/number-theory/inverse/
$a\cdot a^{-1}\equiv1\pmod b$,$a^{-1}$ 是 $a$ 在模 $b$ 意义下的逆元。
感觉本算法的应用比较广一些。
求法:
| 求 $i^{-1}\quad(1\le i\le n)$ | $\Theta(n)$ | 线性求从 1 开始连续 n 个数的逆元 |
| 求 $i^{-1}\quad i \in s\ (s\subseteq[1,b]\,)$ | $\Theta(\left\vert s\right\vert+\log b)$ | 线性求任意 n 个数的逆元 |
| 求 $a^{-1}\quad \gcd(a,b)=1$ | $O(\log(\min(a,b)))$ | 扩展欧几里得法 |
| 求 $a^{-1}\quad \gcd(a,b)=1 $ 要求 $b \in \text{prime}$ | $\Theta(\log b)$ | 快速幂法 #不推荐 |
线性求从 1 开始连续 n 个数的逆元
先上结论:
$$ i^{-1}\equiv \begin{cases} \text{undifined},&i=0 \\ 1,&i=1 \\ -\left\lfloor\dfrac p i \right\rfloor\cdot(p\bmod i)^{-1},&\text{otherwise}\end{cases} $$
证明:
$\because 1\cdot1=1\equiv1\pmod p\qquad\qquad\qquad\therefore 1^{-1}\equiv1\pmod p$
$\because\left\lfloor\dfrac p i \right\rfloor\cdot i\,+\,(p\bmod i)\equiv0\pmod p\quad\therefore\left\lfloor\dfrac p i \right\rfloor\cdot(p\bmod i)^{-1}\,+\,i^{-1}\equiv0\pmod p$
代码
线性求任意 n 个数的逆元
先通过一次扫描扫出 n 个数前缀乘积数组 $S$
然后通过扩展欧几里得法或快速幂法求出 $S_n^{-1}$
然后从后往前递推求出前缀逆元乘积数组 $S^{-1}$
依靠 $a_i^{-1}=\dfrac{S_i^{-1}}{S_{i-1}}$ 求出 $a^{-1}$
代码
| |
欧拉函数
欧拉函数表示小于等于 $n$ 的正整数中与 $n$ 互质的数的个数,记作 $\varphi(n)$
举个例子:小于等于 10 的正整数有 {1,2,3,4,5,6,7,8,9,10},其中有且只有 {1,3,7,9} 与 10 互质,故 $\varphi(10)=4$
OEIS 上的欧拉函数序列 :
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | … |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 2 | 2 | 4 | 2 | 6 | 4 | 6 | 4 | 10 | 4 | 12 | 6 | 8 | 8 | 16 | 6 | 18 | 8 | … |
欧拉函数的性质
- 积性函数
$\text{if } \gcd(a,b)=1 \implies\varphi(a)\times\varphi(b)=\varphi(a\times b)$
(特别的,$n\in\text{odd}\implies\varphi(2n)=\varphi(n)$)
- $n=\sum_{d|n}\varphi(d)$
(特别的,$n\in\text{prime}\iff\varphi(n)=n-1$)
把 $n$ 分解质因数:$n=\prod_{i=1}^s p_i\;(p_i\in\text{prime})\implies\varphi(n)=n\times\prod_{i=1}^s \dfrac{p_i-1}{p_i}$
欧拉定理
$\gcd(a,m)=1\implies a^{\varphi(m)}\equiv1\pmod m$
例: $5^{\varphi(6)}=5^2=25\equiv1\pmod6$
$\qquad\,7^{\varphi(12)}=7^4=2401\equiv1\pmod{12}$
…
- 扩展欧拉定理
$$ a^b=\begin{cases}a^{b\bmod\varphi(b)},&\gcd(a,p)=1 \\ a^b,&\gcd(a,p)\ne1,b<\varphi(p) \\ a^{(b\bmod\varphi(p))+\varphi(p)},&\gcd(a,p)\ne1,b\ge\varphi(p)\end{cases}\quad\pmod p$$
求 $\varphi(n)$
挖坑
莫比乌斯函数
$$\mu(n)=\begin{cases}1,&n=1\\0,&n=k\cdot z^2;(k,z\in\mathbb Z)\\(-1)^k,&n=\prod_{i=1}^kp_i,;p_i\in\text{prime}\end{cases}$$
举个例子:$10=2\times5$ ,故 $\mu(10)=(-1)^2=1$
$\qquad\qquad\;\;24=2^3\times3$,故 $24=6\times2^2$,$\mu(24)=0$
莫比乌斯函数的性质
- 积性函数
$\text{if } \gcd(a,b)=1 \implies\mu(a)\times\mu(b)=\mu(a\times b)$
$$\sum\limits_{d|n}\mu(d)\;=\begin{cases}1,&n=1\\0,&n\ne1\end{cases}$$
求 $\mu(n)$
挖坑