欧拉函数&欧拉定理&莫比乌斯函数
欧拉函数
定义
\(\varphi(n)\)表示的是小于等于n且和n互质的数的个数。
\(especailly,\) \(\varphi(1)=1\)
\(for\) \(a\) 质数\(n,\) \(obviously,\varphi(n)=n-1\)
性质
一.\(it\) \(is\) \(a\) 积性函数
二.\(n=\sum\limits_{d|n}\varphi(d)\)
三.设\(n=\prod^n_{i=1}p_i^{k_i}\),其中\(p_i\)皆为质数,则有\(\varphi(n)=n\times\prod_{i=1}^n \frac{p_i-1}{p_i}\)
求法
对于一个数n,根据第三条性质
int get_one_phi(int n) {
int m = sqrt(n);
int ans = n;
for (int i=2;i*i<=n;i++)
if(!n%i){
ans=ans/i*(i-1);
while(n%i==0)n/=i;
}
if(n>1)ans=ans/n*(n-1);
return ans;
}
线性推
void get_all_phi(){
for(int i=2;i<=n;i++){
if(!vis[i]) prim[++pn]=i,phi[i]=i-1;
for(int j=1;j<=pn&&i*prim[j]<=n;j++){
vis[i*prim[j]]=1;
if(i%prim[j]==0){
phi[i*prim[j]]=phi[i]*prim[j];
break;
}
else phi[i*prim[j]]=phi[i]*(prim[j]-1);
}
}
}
欧拉定理
what is it?
若\(gcd(a,m)=1\),则\(a^{\varphi(m)}\equiv1 (mod\) \(m)\)
没错就是这样简易
deeper?
\( \begin{cases} a^b\equiv a^{b\text{ mod }\varphi(m)} \text{ mod m } \text{ gcd(a,m)=1}\\ \\ a^b\equiv a^{b\text{ mod }\varphi(m)+\varphi(m)} \text{ mod m} \text{ gcd(a,m)}\neq1 \end{cases}\)
莫比乌斯函数
定义
\(\mu(n)= \begin{cases} 1,n=1\\ (-1)^k,n=p_1\times p_2\times ···p_k\\ 0,\text{the others} \end{cases}\)
性质
一.若\(gcd(a,b)=1\),则\(\mu(ab)=\mu(a)\times\mu(b)\)
二.\([n==1]=\sum\limits_{d|n}\mu(d)\)
三.\(\sum\limits_{d|n}\frac{\mu(d)}{d}=\frac{\varphi(n)}{n}\)
四.【莫比乌斯反演】若\(g(n)=\sum\limits_{d|n}f(d)\),则\(f(n)=\sum\limits_{d|n}\mu(\frac n d)\times g(d)\)
求法
单个大体如上
线性筛
void get_all_mu(){
mu[1]=1;
for(int i=2;i<=1e7;i++){
if(!v[i])mu[i]=-1,p[++tot]=i;
for(int j=1;j<=tot&&i<=1e7/p[j];j++){
v[i*p[j]]=1;
if(i%p[j]==0){
mu[i*p[j]]=0;
break;
}
mu[i*p[j]]=-mu[i];
}
}
}