欧拉函数及欧拉定理&逆元学习笔记
——by sunzz3183
欧拉函数
定义
\[\varphi (n)=\sum\limits_{i=1}^{n} [\gcd(n,i)=1]
\]
根据容斥可得
\[\varphi(n)=n\prod_{i=1}^{k}(1-\frac{1}{p_i})
\]
所以可得以下代码
inline int euler(int x){
int res=x;
for(int i=2;i*i<=x;i++)
if(!(x%i)){
res=res/i*(i-1);
while(!(x%i))x/=i;
}
if(x>1)res=res/x*(x-1);
return res;
}
筛法
原理
\[\varphi(n)=n\prod_{i=1}^{k}(1-\frac{1}{p_i})
\]
所以:
- 当 \(n\) 为质数的时候 \(\varphi (n)=n-1\)
- 设 \(d=\frac{n}{p}\) 其中 \(p\)为 \(n\) 的最小质因子。
-
当 \(p\) 是 \(d\) 的某个质因子时,则 \(\varphi (n)=\varphi (d)\times p\)
-
当 \(p\) 与 \(d\) 互质时,\(\varphi (n)=\varphi (d)\times \varphi (p)\)
所以,欧拉函数为积性函数(当 \(x\perp y\) 时, \(\varphi (xy)=\varphi (x)\times \varphi (y)\))
代码
int cnt,prime[M],phi[N],mu[N];
bool is_p[N];
void init(int n){
phi[1]=mu[1]=1;
for(int i=2;i<=n;i++){
if(!is_p[i])prime[++cnt]=i,phi[i]=i-1,mu[i]=-1;
for(int j=1;j<=cnt&&i*prime[j]<=n;j++){
is_p[i*prime[j]]=1;
if(!(i%prime[j])){
phi[i*prime[j]]=phi[i]*prime[j];
mu[i*prime[j]]=0;
break;
}
phi[i*prime[j]]=phi[i]*(prime[j]-1);
mu[i*prime[j]]=-mu[i];
}
}
}
重要公式:
\((1)\)
\[\sum\limits_{d|n} \varphi (d)=n
\]
证明:
设 \(f(n)=\sum\limits_{d|n} \varphi (d)\)
由筛法的原理1,2可知
\[\varphi (p^k)=\varphi (p)\times p^{k-1}=(p-1)\times p^{k-1}=p^k-p^{k-1}
\]
对于
\[\sum\limits_{d|p^k} \varphi (d)
\]
显然,\(d=\left \{ p^0,p^1,p^2,...,p^k\right \}\)。那么有
\[\begin{aligned}
\\&=\sum\limits_{i=0}^k \varphi (p^i)
\\&=(\sum\limits_{i=1}^k p^i-p^{i-1})+1
\\&=p^k-p^{k-1}+p^{k-1}-p^{k-2}+...+p-1+1
\\&=p^k
\end{aligned}\]
\(\therefore f(p^k)=p^k\)
\(\because f(ab)=\sum\limits_{d|ab} \varphi (d)=(\sum\limits_{d|a} \varphi (d)) \times (\sum\limits_{d|b} \varphi (d))=f(a)\times f(b)\)
\(\therefore f(n)\)为积性函数。
\[\begin{aligned}
\\&\therefore f(n)
\\&=f(p_1^{c_1}\times p_2^{c_2}\times p_3^{c_3}\times ...\times p_k^{c_k})
\\&=f(p_1^{c_1})\times f(p_2^{c_2})\times f(p_3^{c_3})\times ...\times f(p_k^{c_k})
\\&= p_1^{c_1}\times p_2^{c_2}\times p_3^{c_3}\times ...\times p_k^{c_k}
\\&=n
\end{aligned}\]
\((2)\)
\[\begin{aligned}
\\&\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{n} [\gcd(i,j)=1]
\\&=\sum\limits_{i=1}^{n}(2\sum\limits_{j=1}^{i}[\gcd (i,j)=1])-1
\\&=2 \sum\limits_{i=1}^{n}\varphi (i)-1
\end{aligned}\]
可以使用前缀和,使得 \(O(1)\) 查询。
\((2.5)\)
\[\begin{aligned}
\\&\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m} \gcd(i,j)
\\&= \sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m} \sum\limits_{d|gcd(i,j)} \varphi (d)
\\&= \sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m} \sum\limits_{d|i,d|j} \varphi (d)
\\&= \sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m} \sum\limits_{d=1}^{min(n,m)} \varphi (d)[d|i][d|j]
\\&=\sum\limits_{d=1}^{min(n,m)} \varphi (d) \sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m} [d|i][d|j]
\\&=\sum\limits_{d=1}^{min(n,m)} \varphi (d) \left \lfloor \frac{n}{d} \right \rfloor \left \lfloor \frac{m}{d} \right \rfloor
\end{aligned}\]
\((3)\)
莫比乌斯反演(拓展)
\[\begin{aligned}
\\&\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m}[\gcd(i,j)==1]
\\&= \sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m} \sum\limits_{d|gcd(i,j)} \mu (d)
\\&=\sum\limits_{i=1}^{n} \sum\limits_{d=1}^{min(i,m)} \mu (d)\left \lfloor \frac{min(i,m)}{d} \right \rfloor
\\&=\sum\limits_{d=1}^{min(n,m)} \mu (d)\left \lfloor \frac{n}{d} \right \rfloor \left \lfloor \frac{m}{d} \right \rfloor
\end{aligned}\]
费马小定理&欧拉定理&扩展欧拉定理
同余
定义
如果
\[d|(a-b)
\]
则我们称
\[a\equiv b\pmod{d}
\]
性质
1.反身性:\(a\equiv a \pmod{m}\);
2.对称性:若 \(a\equiv b \pmod{m}\),则 \(b\equiv a \pmod{m}\);
3.传递性:若 \(a\equiv b \pmod{m}\),\(b\equiv c \pmod{m}\),则 \(a\equiv c \pmod{m}\);
4.同余式相加:若 \(a\equiv b \pmod{m}\),\(c\equiv d \pmod{m}\),则 \(a\pm c\equiv b\pm d \pmod{m}\);
5.同余式相乘:若 \(a\equiv b \pmod{m}\),\(c\equiv d \pmod{m}\),则\(ac\equiv bd \pmod{m}\)。
费马小定理
定义
对于一个整数 \(a\) 和 质数 \(p\),如果满足
\[a\perp p
\]
则符合
\[a^{p-1}\equiv 1 \pmod{p}
\]
欧拉定理
定义
费马小定理的广义。
对于两个整数 \(a\) 和 \(m\),如果满足
\[a\perp m
\]
则符合
\[a^{\varphi(m)}\equiv 1\pmod{m}
\]
逆元
定义
若
\[ab\equiv 1\bmod m
\]
则
\(b\) 为 \(a\) 在 \(\bmod m\) 意义下的逆元,同时,\(a\) 也为 \(b\) 在 \(\bmod m\) 意义下的逆元。
任意整数 \(a\) 在 \(\bmod m\) 意义下的逆元记为 \(inv(a,m)\)。
显然,逆元就是在 \(\bmod\) 某个数意义下的倒数,即
\[inv(a,m)=a^{-1} \bmod m
\]
求法
- 费马小定理求法(\(p\in Prime,a\perp p\))
\[\begin{aligned}
\\&\because a^{p-1}\equiv 1 \pmod{p}
\\&\therefore a^{p-2}=\frac {1}{a}\pmod{p}
\\&\therefore inv(a,p)=a^{p-2}\pmod{p}
\end{aligned}\]
- 欧拉定理求法(\(a\perp m\))
\[\begin{aligned}
\\&\because a^{\varphi(m)}\equiv 1 \pmod{m}
\\&\therefore a^{\varphi(m)-1}=\frac {1}{a}\pmod{m}
\\&\therefore inv(a,p)=a^{\varphi(m)-1}\pmod{m}
\end{aligned}\]
- 线性求逆元(\(p\in Prime,a\perp p\))
对于所有的 \(i<p\),有一种线性求逆元(\(i^{-1}\))的方法。
因为 \(i<p\),所以可以用 \(i\) 表示 \(p\),即
\[p=ki+b
\]
即
\[ik+b \equiv 0 \pmod{p}
\]
等式两边同乘 \(i^{-1}\),得
\[k+bi^{-1} \equiv 0 \pmod{p}
\]
移项,分离处 \(i^{-1}\),得
\[i^{-1} \equiv -kb^{-1} \pmod{p}
\]
又
\[ \begin{aligned}
\\&\because k=\left \lfloor p/i \right \rfloor,b=p\bmod i
\\&\therefore i^{-1} \equiv -(p/i)(p\bmod i)^{-1} \pmod{p}
\\&\therefore i^{-1} \equiv (p-p/i)(p\bmod i)^{-1} \pmod{p}
\end{aligned} \]
因为 \((p\bmod i)^{-1}\) 已经处理好了
所以可以线性处理
代码
inv[1]=1;
for(int i=2;i<=n;i++)inv[i]=(mod-mod/i)*inv[mod%i]%mod;
- 线性求阶乘逆元
可以在组合数问题上发挥作用
显然
\[\frac{1}{(n-1)!}=n\cdot \frac{1}{n!}
\]
所以
fac[0]=inv[0]=1;
for(int i=1;i<=n;i++)
fac[i]=fac[i-1]*i%mod;
inv[n]=ksm(fac[n],mod-2);
for(int i=n;i>=1;i--)
inv[i-1]=inv[i]*i%mod;
扩展欧拉定理
\[a^b\equiv
\begin{cases}
a^{b\mod{\varphi(m)}}&a\perp m
\\a^b&\neg a\perp m,b<\varphi (m)
\\a^{b\mod{\varphi (m)} +\varphi (m)}&\neg a\perp m,b\geq\varphi(m)
\end{cases}
\mod{m}\]
互质可以不要
\[a^b \equiv \begin{cases} a^b&b<\varphi (m)\\a^{b\mod{\varphi (m)} +\varphi (m)}&b\geq\varphi (m)\end{cases}\mod{m}
\]