莫比乌斯反演入门
0前言&前置芝士
很多莫反的题解公式推导过程直接一条式子带过,非常的简略,让本蒟蒻非常的懵因此学习之后写了一篇,每条式子之间都会解释怎么来的。
有些证明移至第 \(6\) 部分。
前置芝士让您的阅读体验更好。
- 艾弗森括号 \([x]\) 当括号里的条件为真时,式子值为 \(1\),反之为 \(0\)。
举个例子:
在此式子中,仅 \(i=1\) 有贡献。
- 整除符号 \(\mid\)
如果 \(a\mid b\) 那么 \(b\) 是 \(a\) 的倍数。
如果 \(a\nmid b\) 那么 \(b\) 不是 \(a\) 的倍数。
1一些基础函数的定义
1.莫比乌斯函数
2.单位函数
4.常函数
5.恒等函数
6.欧拉函数
即小于 \(n\) 并且与 \(n\) 互质的数的个数。
称一个函数是积性的当且仅当对于任意 \((a, b)=1\), 有\(f(a) f(b)=f(a b)\)。
称一个函数是完全积性的当且仅当对于任意 \(a, b\), 有\(f(a) f(b)=f(a b)\)。
2.定理/引理:
这些定理在第 \(6\) 部分有详细的证明。
2.重要性质,是很多题的关键
其实就是把 \(\gcd(i,j)\) 代替上文的 \(n\)。
- \(\mu\) 是积性函数
3.莫比乌斯反演
设
那么莫比乌斯反演内容就是:
考虑证明,(如果你会狄利克雷卷积的话就很简单,这里提供最基础的证法)
由定义:
那么原式(为了与原式的 \(d\) 区分,我们引入 \(d'\)):
考虑将后面这个西格玛移到前面来,但不是简单的将整个西格玛移过来,会有一些小变化。这算是一个技巧,交换求和顺序,这会让我们的推导和计算更方便,但有时候交换求和顺序会导致一些值缺失或增加,要把它们给补上,本质上就是要让交换前后的式子等价。
那么移到前面:
根据上文重要性质,将后面的西格玛换掉
将 \(d'\) 变为 \(d\)(因为此时式子里不含\(d\))
容易发现,当且仅当 \(d=n\) 时的时候会对答案做出贡献。
所以最后变为 \(g(n)\) 了。
所以:
4.狄利克雷卷积
这里只介绍了非常少一部分的狄利克雷卷积,因为本文的主体并不是这个。
定义两个数论函数 \(f(n)\),\(g(n)\) 之间的加法是:
\((f+g)(i)=f(i)+g(i)\)
即逐项相加。
定义两个数论函数 \(f(n)\),\(g(n)\) 之间的狄利克雷卷积 \(*\) 是:
其狄利克雷卷积为 \(t=f*g\),满足:
另一种形式:
狄利克雷卷积性质:
-
交换律:\(f*g=g*f\)
-
结合律;\(f*u*v=f*(u*v)\)
-
分配律:\(f*(u+v)=f*u+f*v\)
-
单位函数:\(\epsilon * f = f\)
这些结论都很显然,我就不证了。
接下来介绍狄利克雷卷积意义下的逆元。
定义:对于任意 \(f(1) \neq 0\) 的函数,都有 \(f*g=\epsilon\),把 \(g\) 叫做 \(f\) 的逆元,简称 \(f^{-1}\)。
怎么求 \(f\) 的逆元呢?
???这是怎么得出来的?
我也不知道
那我们来证一下:
\([n=1]\) 不就是 \(\epsilon\),好,这是对的。
接下来有两个积性函数与狄利克雷卷积的小性质:
若 \(f(n),g(n)\) 都是积性函数,有:
-
\(f*g\) 也是积性函数。
-
\(f^{-1}\) 是积性函数。
证明嘛,我不会,可以网上找。
欸,今天不是讲莫比乌斯反演吗,怎么走偏了?
接下来回到莫比乌斯函数。
定义:常函数 \(1\) 的逆元是 \(\mu\),即 \(1*\mu=\epsilon\)。
其实是可以证的,我们这里简短地证一下。
用卷积把乘法展开,得:
-
当 \(n=1\) 时,当且仅当 \(d=1\) 时,\(\sum_{}\mu(d)=\mu(1)=\epsilon(1)\)
-
当 \(n>1\) 时,设 \(n=\prod_{i=1}^{m} p_{i}^{k_{i}}\),仅需考虑无平方因子的除数 \(d\)(即 \(d=\prod_{i\in S}p_i\),\(S\subseteq \{1,\dots,k\}\)),此时 \(\mu(d) = (-1)^{|S|}\)。所以:
考虑我们现在用狄利克雷卷积来证明莫比乌斯反演。
设 \(g(n)=\sum_{d\mid n} f(d)\),即 \(g=f*1\)。
两边卷积 \(\mu\):
展开即得:
怎么样,用狄利克雷卷积证是不是简单又快。
5例题
例1 P3445:
P2257 是这道题的加强版,并且 \(x\) 为质数,感兴趣可以去做。
题目大意:对 \(T\) 组询问求:
同除 \(x\),得:
将 \([\gcd(i,j)=1]\) 转换(由重要性质得到)
\(d \mid \gcd(i,j)\) 并不好看,发现 \(d\) 的上界就是 \(\lfloor\frac{\min(a,b)}{x}\rfloor\),因此转化为枚举 \(d\),并添加条件 \([d\mid i]\),\([d\mid i]\),即满足上文 \(d\mid \gcd(i,j)\)。
提出来,得:
为了让 \([d\mid i]\) ,\(i\) 就是 \(d\) 的倍数,在 \(1\) 到 \(\lfloor\frac{a}{x}\rfloor\) 中 \(d\) 的倍数个数就是 \(\lfloor\frac{a}{dx}\rfloor\) 个,\(j\) 同理。
所以变成了:
分块做。
例2
求:
其中 \((x,y) = \gcd(x,y)\)
这东西长得,好熟悉啊。
我会!直接换,得:
额。。然后呢?六个西格玛看起来真的够呛,而且还不好消。
我们发现 \(i,j,k\) 都只是枚举的变量,对计算并没有什么贡献,应该考虑消去。
-
\(x\mid i\) 且 \(x\mid j\),所以 \(x\mid(i,j)\)。
-
\(y\mid j\) 且 \(y\mid k\),所以 \(y\mid(j,k)\)。
-
\(z\mid i\) 且 \(z\mid k\),所以 \(z\mid(i,k)\)。
换句话说,\(i\) 是 \(lcm(x,z)\) 的倍数(因为 \(i\) 要同时被 \(x\),\(z\)整除),同理,\(j\) 是 \(lcm(x,y)\) 的倍数,\(k\) 是 \(lcm(y,z)\) 的倍数
可以发现 对 \(i\) 的求和个数是 \(\frac{a}{\text{lcm}(x,z)}\),对 \(j\) 的求和个数是 \(\frac{b}{\text{lcm}(x,y)}\),对 \(k\) 的求和个数是 \(\frac{c}{\text{lcm}(y,z)}\)。
所以上式变为:
发现值不为0的三元组数量有限,所以枚举所有值不为0的三元组,做三元环计数,特判有两个或者三个数相同的情况。
例3:
设 \(d(x)\) 为 \(x\) 的约数个数,对于 \(T\) 组询问给定\(n\)、\(m\),求:
引理:\(d(ij)=\sum_{x \mid i}^{}\sum_{y\mid j}^{}[\gcd(x,y)=1]\),第 \(6\) 部分有证明。
如果你有认真阅读上文,那么你就会做了,但为了方便理解还是写出推导过程,但不附加文字了(懒)。
好了,到现在,式子变为了三个西格玛,第一个西格玛我们很好求,后面两个就没那么好求了,那么我们设 \(I = di\),\(J=dj\),这样我们就可以消去一些条件,原式变为:
这样是不是好看多了,分块做即可。
例4
给你一个长为 \(n\) 的排列 \(a\),求:
其中,\((x,y)\) 表示 \(\gcd(x,y)\)。
如果没有后面的 \(a_i,a_j\),这道题是很好做的,那我们先暂时不管它们,来处理 \(i,j\)。
枚举 \((i,j)\) 可能的结果 \(d\):
设 \(i = di'\) 和 \(j = dj'\),显然 \(i',j'\) 的范围是 \(i', j'\geq 1\) 且 \(i'\leq\lfloor\frac nd\rfloor\),\(j' \leq \lfloor\frac nd\rfloor\)。
此时:
代入得:
\(\gcd=1\),是不是很熟悉。
因为 \(k \mid i'\) 且 \(k \mid j'\),且 \(i', j'\leq \lfloor\frac nd\rfloor\),所以 \(k\) 的范围为 \(1\leq k \leq \lfloor\frac nd\rfloor\)。
设 \(i' = k i''\),\(j' = k j''\),其中 \(i'', j'' \geq 1\)。则 \(i''\leq\lfloor\frac{n}{dx}\rfloor\),\(j''\) 同理。代入:
好丑,把 \(i\),\(j\) 换回来吧。
前面部分很好算,后面不好算,我们设:
问题就转化为如何求 \(f(dx)\) 了,不难发现问题就转化成求一个集合中数对的 \(\gcd\) 之和。
那么:
我们考虑算 \([(i,j)=d]\)。
引理(证明在第 \(6\) 部分):
我们把 \((i,j)\) 代替 \(x\)。
原式变为:
接下来,把 \(\mu\) 提出来,并分离一下后面两个西格玛。
我们发现 \(i\),\(j\) 没有本质的区别,因此可以化为同一个。
再次交换求和顺序(前两个西格玛)。
因为 \(d\mid T\),交换了要修改上界,那么:
设:
你会发现这是上文提到的狄利克雷卷积,是 \(id*\mu\),也就是 \(\varphi\),可以预处理。
那么,\(f(x)\) 变为了:
我们就可以得到一个算法,对于每个 \(x\) 得到它的集合 \(S\) ,然后把集合中每个数的因子都增加 \(1\) 。最后依次统计所有因子的贡献之和,然后做 \(n\) 次就可以得到 \(f(1)\sim f(n)\) 了。
最后代回原式就可以算出来了。
看似是 \(O(n^2)\) 的,实际可以 \(O(n log^2 n)\) 地做。
6上文所用的引理/定理证明
证明1
证明:
当 \(n=1\) 显然成立,因为 \(\mu(d)=1\)
对于 \(n>1\) ,其正因数 \(d\) 中,若 \(d\) 有平方因子,则 \(\mu(d)=0\) (定义),因此这些 \(d\) 对加和无贡献。
仅需考虑无平方因子的 \(d\) ,即 \(d\) 是 \(n\) 的素因数的子集的乘积(因为 \(d\mid n\) 且无平方因子)。
这样说很抽象啊,举个例子。
将 \(n\) 质因数分解,\(n=\prod_{i=1}^{m} p_{i}^{k_{i}}\)。
那么 \(d\) 就是 \(\left \{p_1,p_2,p_3 \cdots p_m\right \}\) 的一个子集。
这样的 \(d\) 共有 \(2^m\) 个。
- 空集对应 \(d=1\),\(\mu(1)=1\);
- 含1个素数的子集(如\((\left \{p_1\right \},\left \{p_2\right \},\cdots,\left \{p_m\right \})\) 对应 \(d=p_i\),\(\mu(p_i)=-1\),共\(\binom{m}{1}\)个;
- 含2个素数的子集对应 \(d=p_ip_j\),\(\mu(p_ip_j)=(-1)^2=1\),共\(\binom{m}{2}\)个;
- $\dots $
- 含 \(k\) 个素数的子集对应 \(d=p_{i_1}\cdots p_{i_k}\),\(\mu(d)=(-1)^k\),共\(\binom{m}{k}\)个;
- $\dots $
- 含 \(m\) 个素数的子集对应 \(d=p_1\cdots p_m\),\(\mu(d)=(-1)^m\),共\(\binom{m}{m}\)个。
因此,和式可写为:
欸,这长得怎么这么像二项式定理啊。
由二项式定理得:
显然 \((1-1)^m=0\),所以当 \(n>1\) 时 \(\sum_{d|n}\mu(d)=0\)。
综上所述,
证明2
\(\mu\) 是积性函数。
设两个数 \(x\),\(y\),使得 \(\gcd(x,y)=1\)。
也就是我们要证明 \(\mu(x)\mu(y)=\mu(xy)\)。
当 \(\mu(x)\) 或 \(\mu(y)\) 之中任意一个为 \(0\) 或 \(1\) 时,上式显然成立。
那么就剩 \(-1\) 的情况了。
\(x=\prod_{i=1}^{m1}{p1}_i\),\(y=\prod_{j=1}^{m2}{p2}_i\)
因为 \(\gcd(x,y)=1\),所以 \(xy =\prod_{i=1}^{m1}{p1}_i\prod_{j=1}^{m2}{p2}_i\),并且两个质因数集合没有交集,所以 \(xy=\prod_{i=1}^{m1+m2} p_i\),\(p_i\)是 \({p1}_i\) 和 \({p2}_i\) 并集。
所以 \(\mu(xy) = (-1)^{m1+m2}\)
所以 \(\mu(x)\mu(y)=\mu(xy)\)。
证明3
其中 \(d(x)\) 表示 \(x\) 的约数个数。
设质数\(p\),\(i=i'\times p^{k_1},j=j' \times p^{k_2}\),\(k_1,k_2\) 可以为 \(0\),此时 \(i=i,j=j\) 也是成立的。
在 \(ij\) 的因子中,\(p\) 的这一项指数可以为 \(0\sim k_1+k_2\) 共 \(k_1+k_2+1\) 种选法。
再看等式右边,我们只看 \(p\) 这一项。\(x=x'\times p^{k_3}\), \(y=y'\times p^{k_4}\)
要满足 \(\gcd(x,y)=1\),那么就有\(\gcd(p^{k_3},p^{k_4})=1\)
如果 \(k_3,k_4\) 同时 \(> 0\) 那么它们的 \(\gcd\) 不可能为 \(1\)。
-
\(k_3=0,k_4 \in [0,k_2]\),共 \(k_2+1\) 种。
-
\(k_4=0,k_3 \in [0,k_1]\),共 \(k_1+1\) 种。
最后去掉 \(k_3=0,k_4=0\) 的方案,总方案数 \((k1 + k2 + 1)\)。
发现等式两边相等,上式成立。
证明4
卷积可以证。
如果是 \([x=1]\) 我们可以很快转换,这里用到了上文也用到的方法。
设 \(x=d\times x'\),\(T=d\times T'\)。(\(k,m \ge 1\))
显然 \(T'\mid x'\),因为 \(T\mid x\)。
那么,式子变成了:
欸,好眼熟,不就是这个吗:
\(n\) 就是 \(x'\),\(d\) 就是 \(T'\),重要性质上面证过了,这里不再赘述。

浙公网安备 33010602011771号