莫比乌斯函数与莫比乌斯反演学习笔记

1.莫比乌斯函数与莫比乌斯反演

O.约定

\colorboxredblog

主要是因为我太懒了,下取整符号的LATEX表达式太长了

I.作用

设有一函数g(n)=d|nf(d)

显然,如果我们知道每个f(d)的值,那么g(n)的值应该是很容易得到的废话,不就按照定义瞎递推一下吗

那么如果我们知道每个g(n)的值,又应该如何求出f(d)来呢?

II.定义

我们引出莫比乌斯函数μ(x)

定义:

x可以被质因数分解成i=1n(ai)pi,则

μ(x)={0(i[1,n],pi>1)(1)n(i[1,n],pi=1)

换句话说,如果这个x包含某一个质数的平方或更高次数项,则μ(x)=0;否则,如果它包含偶数个质因数,μ(x)=1;否则,即它包含奇数个质因数,μ(x)=1

这个形式诡异的函数有什么用吗?

III.性质

1.μ(x)是积性函数。即,

gcd(i,j)=1,μ(ij)=μ(i)μ(j)

因此,我们可以采用欧拉筛线性求它。

就是按照它的定义来求,因为积性函数都可以在线性筛时顺便求出。

int mu[N],pri[N];
void getmu(int n){
	mu[1]=1;
	for(int i=2;i<=n;i++){
		if(!pri[i])pri[++pri[0]]=i,mu[i]=-1;
		for(int j=1;i*pri[j]<=n&&j<=pri[0];j++){
			pri[i*pri[j]]=true;
			if(!(i%pri[j]))break;
			mu[i*pri[j]]=-mu[i];
		}
	}
}

2.(最重要)

d|xμ(d)={1(x=1)0(x1)

证:

x=1时,由定义,显然成立。

否则,设x=i=1n(ai)pi

对于它的每一个因数d,只有当d=i=1n(ai)pi,pi{0,1}时,才有μ(d)0

如果d包含m个质因数,则μ(d)=(1)m。在所有x的因数中,共有Cnm个这样的d

也就是说,d|xμ(d)=m=0n(1)mCnm

依据某奇妙的二项式定理,这个东西有m=0n(1)mCnm=(11)n=0

证毕。

IV.反演

正片开始。

回到我们一开始的说法。莫比乌斯反演对于g(n)=d|nf(d)的函数fg,假使我们知道每个g(n)的值,我们就可以反推出f(d)的值。

反演定理I:

如果g(n)=d|nf(d),那么f(x)=d|ng(d)μ(nd)

证:

如果f(x)=d|ng(d)μ(nd)

则一定有f(x)=d|ng(nd)μ(d)

d|ng(nd)μ(d)中代入g(x)的定义g(x)=d|nf(d)

d|ng(nd)μ(d)=d|n(i|ndf(i))μ(d)=d|n(id|nf(i))μ(d)

我们将μ(d)乘进括号,得

d|ng(nd)μ(d)=d|n(id|nf(i)μ(d))

然后发现这个实际上的意思就是枚举所有的id,求f(i)μ(d)的和。

因此有d|ng(nd)μ(d)=i|n(id|nf(i)μ(d))=i|nf(i)(id|nμ(d))

看一下后面的id|nμ(d),有id|nμ(d)=d|niμ(d)

是不是很熟悉?当ni=1,即i=n时,该式值为1;否则,值为0

i|nf(i)(id|nμ(d))=f(n)。因为in时后面的东西都是0

证毕。

反演定理II:

如果g(n)=n|df(d),那么f(x)=n|dg(d)μ(dn)

证法类似,也是把g(d)暴力代回去得证。留给读者自证。

posted @   Troverld  阅读(108)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示