莫比乌斯反演学习笔记
积性函数
线性筛欧拉函数
int pri[N],phi[N];
void init()
{
int n=1e5;
phi[1]=1;
for(int i=2;i<=n;i++)
{
if(!vis[i])pri[++cnt]=i,phi[i]=i-1;
for(int j=1;i*pri[j]<=n;j++)
{
vis[i*pri[j]]=true;
if(i%pri[j])phi[i*pri[j]]=phi[i]*(pri[j]-1);
else
{
phi[i*pri[j]]=phi[i]*pri[j];break;
}
}
}
}
莫比乌斯函数
void init()
{
int n=5e4;mu[1]=1;
for(int i=2;i<=n;i++)
{
if(!v[i])pri[++cnt]=i,mu[i]=-1;
for(int j=1;i*pri[j]<=n;j++)
{
v[i*pri[j]]=true;
if(i%pri[j])mu[i*pri[j]]=-mu[i];
else
{
mu[i*pri[j]]=0;break;
}
}
}
for(int i=2;i<=n;i++)mu[i]+=mu[i-1];// 有时候会需要求前缀和
}
莫比乌斯函数
定义莫比乌斯函数 \(\mu(n)\),设 \(n=\prod_{i=1}^{k} p_i^{c_i}\),当 \(\max c_i>1\) 时 \(\mu(n)=0\)。其余情况 \(\mu(n)=(-1)^k\)。
常见应用
- \([gcd(i,j)=1]=\sum_{t|gcd(i,j)}\mu(t)\)
证明:对于 \(gcd(i,j)=1\) 时显然成立。其他情况下可以通过莫比乌斯函数的定义和二项式定理证明,略。
浙公网安备 33010602011771号