[复习资料]莫比乌斯反演学习笔记

由于不想再估了,所以把之前写的 copy 一遍,顺便复习一下。(捂脸)

整除分块

考虑这样一个问题,求:

\[\sum_{i=1}^{n}\lfloor\frac{n}{i}\rfloor \]

因为题目要求的是向下取整,所以肯定会有一些相同的部分,对于这些相同的部分可以直接一起累加。

给定一个数\(k\),满足\(\lfloor\frac{n}{x}\rfloor=\lfloor\frac{n}{k}\rfloor\)相同的最大的\(x\)就是\(\lfloor\frac{n}{\lfloor\frac{n}{k}\rfloor}\rfloor\)

于是代码大概是这样的:

for(int l=1,r;l<=n;l=r+1){
	r=n/(n/l);
	ans+=(r-l+1)*(n/l);
}

时间复杂度:\(O(\sqrt{n})\)

时间复杂度的证明:

\(\lfloor\frac{n}{a}\rfloor\)最多有\(2\sqrt{n}\)种取值。当\(a<=\sqrt{n}\)时,共有\(\sqrt{n}\)取值;当\(a>\sqrt{n}\)时,\(\lfloor\frac{n}{a}\rfloor<\sqrt{n}\),也是共有\(\sqrt{n}\)种取值。每次都是将同一种取值的范围全部取完,所以复杂度就是\(O(\sqrt{n})\)


数论函数

在数论上,算术函数(或称数论函数)指定义域为正整数、陪域为复数的函数,每个算术函数都可视为复数的序列。-百度百科

默认下面讲到的都是数论函数。

函数的运算:

\[f,h\text{为函数,}k,n\text{为常数} \]

\[(f+h)(n)=f(n)+h(n) \]

\[(kf)(n)=k\cdot f(n) \]


积性函数

如果对于任意的\(\gcd(n,m)=1\),都满足\(f(nm)=f(n)f(m)\),我们就称这个函数是积性函数。

如果即使不满足\(\gcd(n,m)=1\),也有\(f(nm)=f(n)f(m)\),那么就称这个函数是完全积性函数。

常见的积性函数:

\[\varphi(n)\text{表示小于}n\text{且和}n\text{互质的数的个数} \]

\[d(n)\text{表示}n\text{的因子个数} \]

\[\sigma(n)\text{表示}n\text{的所有因子和} \]

\[\text{莫比乌斯函数:}\mu(n)=\begin{cases}1\\(-1)^k\\0\end{cases}\begin{matrix}(n=1)\\(n=p_1p_2\dots p_k,p\in prime)\\(otherwise)\end{matrix} \]

常见的完全积性函数:

\[\epsilon(n)=[n==1] \]

\[id(n)=n \]

\[I(n)=1 \]

积性函数的一个性质:两个积性函数的狄利克雷卷积还是积性函数


狄利克雷卷积

数论函数\(f(n),g(n)\)的狄利克雷卷积是一个数论函数,定义为

\[t(n)=\sum_{d\mid n}f(d)g(\frac{n}{d})=\sum_{ab=n}f(a)g(b) \]

简单记为:\(t=f*g\)

狄利克雷卷积满足的一些性质:

  1. \[\text{交换律:}f*g=g*f \]

  2. \[\text{结合律:}(f*g)*h=f*(g*h) \]

  3. \[\text{分配律:}f*h+g*h=(f+g)*h \]

  4. \[(xf)*g=x(f*g) \]

  5. \[\epsilon *f=f \]

  6. \[\text{逆元:对于每一个}f(1)\ne 0\text{的函数}f\text{都存在函数}g\text{使得}f*g=\epsilon \]

对于性质六,考虑构造一个满足条件的\(g\)

由狄利克雷卷积的定义可以得到:

\[\sum_{d\mid n}f(d)g(\frac{n}{d})=f(1)g(n)+\sum_{d\mid n,d\ne 1}f(d)g(\frac{n}{d})=[n==1] \]

所以有:

\[g(n)=\frac{1}{f(1)}([n==1]-\sum_{d\mid n,d\ne 1}f(d)g(\frac{n}{d})) \]

和狄利克雷卷积相关的一些东西:

\[\mu * I=\epsilon \]

证明:
原式就是\(\sum_{d\mid n}\mu(d)=[n==1]\)
\(n=p_1^{k_1}p_2^{k_2}\dots p_x^{k_x}(p\in prime)\)
\(d\)分解后其中的某个质因子的次数大于1,那么\(\mu(d)=0\),我们只考虑\(\mu(d)\ne 0\)的情况,相当于要证明:

\[\binom{x}{0}-\binom{x}{1}+\binom{x}{2}-\dots+(-1)^x\binom{x}{x} \]

\(n=1\)时,\(x=0\),显然有\(\binom{0}{0}=1\)
\(n\ne 1\)时,有:

\[\binom{x}{0}+\binom{x}{2}+\dots=\sum_{i=1}^{x-1}\binom{x-1}{i} \]

\[\binom{x}{1}+\binom{x}{3}+\dots=\sum_{i=1}^{x-1}\binom{x-1}{i} \]

两式相减就是原式,所以原式等于0。

\[\varphi * I=id \]

证明:
原式就是\(\sum_{d\mid n}\varphi(d)=n\)
写出\(n\)个分数:

\[\frac{1}{n},\frac{2}{n},\frac{3}{n},\cdots,\frac{n}{n} \]

化简后,分数\(\frac{a}{d}\)存在当且仅当\(\gcd(a,d)=1,d\mid n\)
所以分母为\(d\)的分数有\(\varphi(d)\)个。

由此我们可以得到\(\varphi\)\(\mu\)的关系:

\[\because \varphi * I =id \]

\[\therefore\varphi * I * \mu=id * \mu \]

\[\therefore \varphi=id*\mu \]

\[\text{即}\varphi(n) = \sum_{d\mid n}\frac{n}{d}* \mu(d) \]

\[\therefore\frac{\varphi(n)}{n}=\sum_{d\mid n}\frac{\mu(d)}{d} \]


杜教筛

杜教筛可以以低于线性的时间复杂度来计算积性函数的前缀和。

求:\(\sum_{i=1}^nf(i)\)

我们要构造两个积性函数\(h\)\(g\),使得\(h=f*g\)

\(S(n)=\sum_{i=1}^nf(i)\)

\[\sum_{i=1}^nh(i)=\sum_{i=1}^n\sum_{d\mid i}g(d)f(\frac{i}{d}) \]

\[\to=\sum_{d=1}^ng(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}f(i) \]

\[\to=\sum_{d=1}^ng(d)S(\lfloor\frac{n}{d}\rfloor) \]

\[g(1)S(n)=\sum_{i=1}^nh(i)-\sum_{d=2}^ng(d)S(\lfloor\frac{n}{d}\rfloor) \]

\(S(\lfloor\frac{n}{d}\rfloor)\)可以用整除分块,一般如果\(h\)的前缀和好求,那么就可以递归较快地求出\(S\)

实现可以先筛出前一部分的函数值,然后递归求解答案,一般要用hash或者unordered_map记录\(f(n)\)

举例:求\(\sum_{i=1}^n\mu(i)\)

\[\mu*I=\epsilon \]

\[I(1)S(n)=\sum_{i=1}^n\epsilon(i)-\sum_{d=2}^nI(d)S(\lfloor\frac{n}{d}\rfloor)=1-\sum_{d=2}^nS(\lfloor\frac{n}{d}\rfloor) \]


莫比乌斯反演

莫比乌斯反演定理:

\[F(n)=\sum_{d\mid n}f(d)\Leftrightarrow f(n)=\sum_{d\mid n}\mu(\frac{n}{d})F(d) \]

证明如下:

\[\because F(n)=\sum_{d\mid n}f(d) \]

\[\therefore\sum_{k\mid n}\mu(\frac{n}{k})F(k)=\sum_{k\mid n}\mu(\frac{n}{k})\sum_{d\mid k}f(d)=\sum_{d\mid n}f(d)\sum_{k\mid \frac{n}{d}}\mu(k)=\sum_{d\mid n}f(d)[n==d]=f(n) \]

其实还有更简便的证明:

\[\because F=f*I \]

\[\therefore F*\mu=f*I*\mu=f \]

\[\text{即}f(n)=\sum_{d\mid n}\mu(\frac{n}{d})F(n) \]

另一种形式:

\[F(d)=\sum_{d\mid n}f(n)\Leftrightarrow f(d)=\sum_{d\mid n}\mu(\frac{n}{d})F(n) \]

举例:求\(\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)\)

\[\text{设}f(x)=\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)==x] \]

\[\text{设}F(x)=\sum_{i=1}^n\sum_{j=1}^m[x\mid\gcd(i,j)]=\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{x}\rfloor \]

\[\text{那么有:}F(x)=\sum_{x\mid d}f(d) \]

\[f(x)=\sum_{x\mid d}F(d)\mu(\frac{d}{x})=\sum_{x\mid d}\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor\mu(\frac{d}{x}) \]

答案就是:

\[\sum_{i=1}^{\min(n,m)}i\cdot f(i)=\sum_{i=1}^{\min(n,m)}i\sum_{i\mid d}\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor\mu(\frac{d}{i}) \]

\[\to=\sum_{d=1}^{\min(n,m)}\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor\sum_{i\mid d}i\cdot \mu(\frac{d}{i}) \]

\[\to=\sum_{d=1}^{\min(n,m)}\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor\varphi(d) \]

\(\varphi(d)\)可以直接线性筛得到,如果只是单组询问,可以直接\(O(n)\)做,否则把后面部分做个前缀和,然后就可以整除分块做了。

附整除分块的代码:

int mx=min(n,m),ans=0;
for(int l=1,r;l<=mx;l=r+1){
	r=min(n/(n/l),m/(m/l));
	ans+=sum[r]-sum[l-1];
}

模板题:

  1. P1447 [NOI2010]能量采集

  2. P2257 YY的GCD

不那么模板的题目:

  1. P1829 [国家集训队]Crash的数字表格 / JZPTAB(注:此题并没有用到莫比乌斯反演,而是用到了莫比乌斯函数的一个性质)

  2. P3768 简单的数学题(注:此题要用杜教筛)

可能可以做的题目:

  1. P3704 [SDOI2017]数字表格

  2. [MtOI2019]幽灵乐团

  3. 一个人的数论

posted @ 2020-09-22 22:33  xiaolilsq  阅读(163)  评论(0编辑  收藏  举报