欧拉函数
欧拉函数
定义
一个数 \(x\) 的欧拉函数 \(\varphi(x)\) 为小于 \(x\) 的正整数中与 \(x\) 互质的数的个数。
特别地,\(\varphi(1)=1\)。
求法
- \(\varphi(n)=n\textstyle\prod^n_{i=1}(1-\frac{1}{p_i})\),其中 \(p_i\) 是 \(n\) 的所有质因数。
- 线性筛求欧拉函数值。
性质
- 是积性函数。
- 对质数 \(p\) ,\(\varphi(p)=p-1\)。
- 小于 \(n\) 的数中,与 \(n\) 互质的数之和为 \(\varphi(n)\times\dfrac{n}{2}(n \lt 1)\)。
- \(n\) 的所有因数的欧拉函数之和等于 \(n\) ,即 \(n=\textstyle\sum_{d\mid n}\varphi(d)\)。
线性筛求欧拉函数
-
在线性筛中,每一个合数都被最小的质因子筛掉。
设 \(p_1\) 是 \(n\) 的最小质因子, \(n'=\dfrac{n}{p_1}\) ,那么线性筛时 \(n\) 通过 \(x'\times p_1\) 筛掉。
-
如果 \(n' \bmod p_1=0\) ,那么 \(n'\) 包含了 \(n\) 的所有质因子。
\(\begin{aligned}\varphi(n)&=n\times \displaystyle\prod^s_{i=1}\dfrac{p_i-1}{p_i}\\&=p_i\times n'\times\displaystyle\prod_{i=1}^{s}\dfrac{p_i-1}{p_i}\\&=p_1\times \varphi(n')\end{aligned}\)
-
如果 \(n' \bmod p_1 \not=0\) ,此时 \(n'\) 与 \(p_1\) 互质,因为欧拉函数是积性函数,则
\(\varphi(n)=\varphi(p_1)\times\varphi(n')=(p_1-1)\times\varphi(n')\)
-
int vis[maxN]; int p[maxN]; int phi[maxN]; int pn; inline void getPhi(int N) { for (int i = 2; i <= N; i++) { if (!vis[i]) { p[++pn] = i; phi[i] = i - 1; } for (int j = 1; i * p[j] <= N; j++) { vis[i * p[j]] = 1; if (i % p[j] == 0) { phi[i * p[j]] = phi[i] * p[j]; break; } phi[i * p[j]] = phi[i] * phi[p[j]]; } } }
欧拉定理
若 \(\gcd(a,m)=1\),则 \(a^{\varphi(m)}\equiv1 \pmod m\)
扩展欧拉定理
\(a^b\equiv \begin{cases}a^{b \bmod \varphi(p)}, & \gcd(a,p)=1\\a^b, &\gcd(a,p)\not=1,b\lt\varphi(p)\\a^{b \bmod \varphi(p)+\varphi(p)},&\gcd(a,p)\not=1,b\geq\varphi(p)\end{cases}\pmod p\)