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

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

O.约定

\(\color{white}\colorbox{red}{本blog中所有的分数,无论有无下取整符号,均默认下取整。}\)

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

I.作用

设有一函数\(g(n)=\sum\limits_{d|n}f(d)\)

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

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

II.定义

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

定义:

\(x\)可以被质因数分解成\(\prod\limits_{i=1}^n(a_i)^{p_i}\),则

\(\boxed{\mu(x)=\begin{cases}0(\exists i\in[1,n],p_i>1)\\(-1)^n(\forall i \in[1,n],p_i=1)\end{cases}}\)

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

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

III.性质

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

\(\boxed{\forall \gcd(i,j)=1,\mu(i*j)=\mu(i)*\mu(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.(最重要)

\(\boxed{\sum\limits_{d|x}\mu(d)=\begin{cases}1(x=1)\\0(x\neq1)\end{cases}}\)

证:

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

否则,设\(x=\prod\limits_{i=1}^n(a_i)^{p_i}\)

对于它的每一个因数\(d\),只有当\(d=\prod\limits_{i=1}^n(a_i)^{p_i},p_i\in\{0,1\}\)时,才有\(\mu(d)\neq 0\)

如果\(d\)包含\(m\)个质因数,则\(\mu(d)=(-1)^m\)。在所有\(x\)的因数中,共有\(C_n^m\)个这样的\(d\)

也就是说,\(\sum\limits_{d|x}\mu(d)=\sum\limits_{m=0}^n(-1)^mC_n^m\)

依据某奇妙的二项式定理,这个东西有\(\sum\limits_{m=0}^n(-1)^mC_n^m=(1-1)^n=0\)

证毕。

IV.反演

正片开始。

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

反演定理I:

\(\boxed{\text{如果}g(n)=\sum\limits_{d|n}f(d), \text{那么}f(x)=\sum\limits_{d|n}g(d)\mu(\dfrac{n}{d})}\)

证:

如果\(f(x)=\sum\limits_{d|n}g(d)\mu(\dfrac{n}{d})\)

则一定有\(f(x)=\sum\limits_{d|n}g(\dfrac{n}{d})\mu(d)\)

\(\sum\limits_{d|n}g(\dfrac{n}{d})\mu(d)\)中代入\(g(x)\)的定义\(g(x)=\sum\limits_{d|n}f(d)\)

\(\sum\limits_{d|n}g(\dfrac{n}{d})\mu(d)=\sum\limits_{d|n}(\sum\limits_{i|\frac{n}{d}}f(i))\mu(d)=\sum\limits_{d|n}(\sum\limits_{i*d|n}f(i))\mu(d)\)

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

\(\sum\limits_{d|n}g(\dfrac{n}{d})\mu(d)=\sum\limits_{d|n}(\sum\limits_{i*d|n}f(i)\mu(d))\)

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

因此有\(\sum\limits_{d|n}g(\dfrac{n}{d})\mu(d)=\sum\limits_{i|n}(\sum\limits_{i*d|n}f(i)\mu(d))=\sum\limits_{i|n}f(i)(\sum\limits_{i*d|n}\mu(d))\)

看一下后面的\(\sum\limits_{i*d|n}\mu(d)\),有\(\sum\limits_{i*d|n}\mu(d)=\sum\limits_{d|\frac{n}{i}}\mu(d)\)

是不是很熟悉?当\(\frac{n}{i}=1\),即\(i=n\)时,该式值为\(1\);否则,值为\(0\)

\(\sum\limits_{i|n}f(i)(\sum\limits_{i*d|n}\mu(d))=f(n)\)。因为\(i\neq n\)时后面的东西都是\(0\)

证毕。

反演定理II:

\(\boxed{\text{如果}g(n)=\sum\limits_{n|d}f(d),\text{那么}f(x)=\sum\limits_{n|d}g(d)\mu(\dfrac{d}{n})}\)

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

原文地址:https://www.cnblogs.com/Troverld/p/14619478.html