莫比乌斯反演学习笔记

积性函数

线性筛欧拉函数

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\) 时显然成立。其他情况下可以通过莫比乌斯函数的定义和二项式定理证明,略。
posted @ 2025-06-25 11:22  baiguifan  阅读(15)  评论(1)    收藏  举报