欧拉函数 学习笔记
定义
\(\varphi(n)\) 表示小于 \(n\) 的数中与 \(n\) 互质的个数,是一个重要的数论函数。
性质
- 若 \(n\) 为质数,则 \(\varphi(n)=n-1\)。
显然小于 \(n\) 的都与 \(n\) 互质。
- 若 \(n\) 为质数,则 \(\varphi(n^k)=n^k-n^{k-1}\)。
在小于等于 \(n^k\) 的数中不与 \(n^k\) 互质的只有 \(n\) 的倍数,共 \(n^{k-1}\) 个。
- 欧拉函数是积性函数,即当 \(\gcd(a,b)=1\),\(\varphi(mn)=\varphi(m)\varphi(n)\)。
先给出几个定义。
剩余类:模 \(n\) 同余的集合。
剩余系:对于某一个特定的正整数 \(n\),一个整数集中的数模 \(n\) 所得的余数域。
完全剩余系:剩余系中包含了这个正整数所有可能的余数。
简化剩余系:完全剩余系中与 \(n\) 互质的数构成的子集。
设 \(x_1,x_2,\cdots,x_{\varphi(m)}\) 为一个模 \(m\) 意义下的简化剩余系,\(y_1,y_2,\cdots,y_{\varphi(n)}\) 为一个模 \(n\) 意义下的简化剩余系。
引理 1:\(\forall i,j,\gcd(x_in+y_jm,mn)=1\)
同理 \(\gcd(x_in+y_jm,n)=1\)。由两式得证。
引理 2:\(x_in+y_im\) 在 \(mn\) 的所有不同剩余类中。
反证法,假设 \(\exists(i,j)\ne(k,l),x_in+y_jm\equiv x_kn+y_lm\pmod{mn}\)。
由于 \(x_i,x_k\) 在同一简化剩余系中,\(i=k\),同理 \(j=l\),矛盾。
引理 3:若 \(z\) 在 \(mn\) 的简化剩余系中,\(\exists i,j,x_in+y_jm\equiv z\pmod{nm}\)。
\(\because \gcd(n,m)=1\),由裴蜀定理得,\(\exists p,q,mp+nq=z\)。
所以 \(p,q\) 分别在 \(n,m\) 的简化剩余系中,得证。
因此 \(x_in+y_jm\) 遍历 \(mn\) 的简化剩余系中。\(mn\) 的简化剩余系大小为 \(\varphi(mn)\),\(x_in+y_jm\) 共 \(\varphi(m)\varphi(n)\) 种。因此 \(\varphi(mn)=\varphi(m)\varphi(n)\)。
- \(\varphi(n)=n\prod(1-\frac{1}{p_i})\)。
欧拉定理
若 \(\gcd(a,m)=1\),则 \(a^{\varphi(m)}\equiv1\pmod{m}\)。
证明:
构造数列 \(r_1,r_2,\cdots,r_{\varphi(m)}\) 为一个模 \(m\) 意义下的简化剩余系。显然 \(ar_1,ar_2,\cdots ar_{\varphi(m)}\) 也是一个模 \(m\) 意义下的简化剩余系。那么 \(\prod r_i\equiv\prod ar_i\equiv a^{\varphi(m)}\prod r_i\)。约掉 \(\prod r_i\) 得证。
费马小定理就是 \(m\) 为质数的特殊情况。
扩展欧拉定理
这个式子常常用来给次数高的式子降幂。
证明:
第一行就是把 \(a^{\varphi(m)}\) 去掉。下面证明第三行。
将 \(m\) 质因数分解为 \(\prod p_i^{\alpha_i}\),即证 \(a^b\equiv a^{b\bmod\varphi(m)+\varphi(m)}\pmod{p_i^{\alpha_i}}\)。
若 \(\gcd(a,p_i^{\alpha_i})=1\):
欧拉函数是积性函数,有 \(\varphi(p_i^{\alpha_i})\mid\varphi(m)\)。那么仿照第一行证明即可。
若 \(\gcd(a,p_i^{\alpha_i})\ne1\):
\(\varphi(p_i^{\alpha_i})=p_i^{\alpha_i}\times\frac{p_i-1}{p_i}=p_i^{\alpha_i-1}(p_i-1)\geq p_i^{\alpha_i-1}\geq \alpha_i\)。有 \(b\geq\varphi(m)\geq\varphi(p_i^{\alpha_i})\geq\alpha_i\)。又因为 \(\gcd(a,p_i^{\alpha_i})\ne1\),即 \(p_i\mid a\),因此 \(p_i^{\alpha_i}\mid a^b\) 且 \(p_i^{\alpha_i}\mid a^{b\bmod\varphi(m)+\varphi(m)}\),即 \(a^b\equiv a^{b\bmod\varphi(m)+\varphi(m)}\equiv0\pmod{p_i^{\alpha_i}}\)。证毕。
题意:求 \(2^{2^{2^\cdots}}\bmod p\)。
用扩展欧拉定理,得到 \(2^{2^{2^\cdots}}\equiv 2^{2^{2^\cdots}\bmod\varphi(p)+\varphi(p)}\pmod{p}\)。上面的 \(2^{2^\cdots}\bmod\varphi(p)\) 中,也是一个无穷项的幂塔,但是模数为 \(\varphi(p)\)。可以不断递归,最终模数会变成 \(1\),此时返回 \(0\)。
int solve(int p){
return p==1?0:qpow(2ll,solve(phi[p])+phi[p],p);
}
欧拉反演
一个性质:\(n=\sum_{d\mid n}\varphi(d)\)。
定义 \(f(n)=\sum_{d\mid n}\varphi(d)\)。
当 \(\gcd(n,m)\),\(f(n)f(m)=\sum_{i\mid n}\varphi(i)\sum_{j\mid m}\varphi(j)=\sum_{i\mid n}\sum_{j\mid m}\varphi(i)\varphi(j)=\sum_{i\mid nm}\varphi(i)=f(nm)\)。因此 \(f(n)\) 是积性函数。
运用这个性质叫欧拉反演。其实就是莫反的一个推论 \(\varphi\ast\mathbf{1}=\operatorname{Id}\)。
考虑欧拉反演,原式等于 \(\sum_{i=1}^n\sum_{j=1}^n\sum_{d\mid\gcd(i,j)}\varphi(d)\)。
枚举 \(d\),原式等于 \(\sum_{d=1}^n\sum_{d\mid i}\sum_{d\mid j}\varphi(d)\),即 \(\sum_{d=1}^n\lfloor\frac n d \rfloor^2\varphi(d)\)。可以整除分块。
#include<bits/stdc++.h>
using namespace std;
int phi_init(int n,int prime[],int phi[],bool a[],int cnt=0){
phi[1]=1;
for(int i=2;i<=n;i++)a[i]=1;
for(int i=2;i<=n;i++){
if(a[i])prime[++cnt]=i,phi[i]=i-1;
for(int j=1;j<=cnt&&i*prime[j]<=n;j++){
a[i*prime[j]]=0;
if(i%prime[j]==0){
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
else phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
return cnt;
}
int n,prime[100005],phi[100005];
long long ans;
bool a[100005];
int main(){
cin>>n,phi_init(n,prime,phi,a);
for(int i=1;i<=n;i++)phi[i]+=phi[i-1];
for(int l=1,r;l<=n;l=r+1)r=n/(n/l),ans+=1ll*(phi[r]-phi[l-1])*(n/l)*(n/l);
return cout<<ans<<'\n',0;
}
[[数学]]

浙公网安备 33010602011771号