莫比乌斯反演学习笔记

莫比乌斯反演:

对于两个数论函数\(f\)\(F\):

\(F(n) = \sum_{d|n}f(d)\Leftrightarrow f(n)=\sum_{d|n}\mu(d)f(\frac{n}{d})\)

其中\(\mu(n)\)为莫比乌斯函数,当\(n=1\)时,\(\mu(n)=1\),当\(n=p_1 p_2...p_k\)时,\(\mu(n)=(-1)^k\),其他情况\(\mu(n)=0\)(主要是不会用\(\LaTeX\)表示分段函数qwq)

证明:

为了解决这个问题,我们引入一个新的运算:狄利克雷卷积

狄利克雷卷积(\(*\)

定义:对于数论函数\(f,g\)\((f*g)(n)=\sum_{d|n}f(d)g(\frac{n}{d})\)(后面的括号内的\(n\)可省略不写,默认为\(n\))

作为一个运算,它自然有运算必须有的东西:

单位元:定义函数\(\epsilon(n)=[n==1]\),其中\([n=1]\)表示当\(n=1\)时值为1,否则为0。这个函数满足对于任意数论函数\(F(n)\),有\(F=F*\epsilon\),类似于乘法中的 "1" ,因此称这个函数为单位元。

交换律:\(f*g=g*f\),这个其实比较显然,因为\(d\)\(\frac{n}{d}\)总是成对的。

结合律:对于三个数论函数\(f,g,h\)\((f*g)*h = f*(g*h)\),证明留做习题。

逆元:若两个数论函数\(f,g\)满足\(f*g=\epsilon\),则\(f,g\)互为逆元。

\(\\\)

那么我们就可以开始证明了。等价符号两边分别用卷积表示:

首先定义一个常函数\(u(n)=1\),则左边的等式可以表示为 \(F=f*u\)

右边的等式表示为 \(f=F*\mu\)

然后经过理性分析,我们发现\(\mu * u = \epsilon\)\(n=1\)显然,\(n \neq 1\)时在计算的时候\(\mu(n)=-1\)\(\mu(n)=1\)总会成对被枚举计算从而相互抵消,结果为 \(0\) ,因此成立。

在这里我们推出了一个非常重要的结论(敲黑板):

\(\mu * u = \epsilon \ \Rightarrow \sum_{d|n}\mu(d)=[n=1]\)

好我们把右边的式子代到左边去。

\(F = f * u = F * \mu * u = F * (\mu * u) = F * \epsilon = F\)

OK证完了,是不是特别简单

那么我们就可以来研究一些实际问题了。

求以下式子的值:

\(\\\)
\(\sum_{i=1}^{n} \sum_{j=1}^{m} [gcd(i,j)==1]\),多组询问。
\(\\\)

其实这个东西不需要反演也可做,用这个结论就行:\(\sum_{d|n}\mu(d)=[n==1]\),我们把\(n\)换成\(gcd(i,j)\),代入原式可以得到这个:

\(\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{d|gcd(i,j)}\mu(d)\)

但这个式子其实没什么用(甚至增加了复杂度)。

这个时候,按照网上绝大多数博客的方法,叫做”交换求和顺序“。

可以得到:

\(\sum_{d=1}^{min(n,m)} \mu(d)\lfloor \frac{n}{d} \rfloor\lfloor \frac{m}{d} \rfloor\)

这个变换过程我想了半年都没有想明白(因为我太菜了。)

我们可以换个角度理解一下,自行打个表:

\(n=3\),\(m=4\),求\(gcd(i,j)\)

\(n \diagdown m\) 1 2 3 4
1 1 1 1 1
2 1 2 1 2
3 1 1 3 1

观察发现,如果我们要按照交换求和顺序前的式子计算,\(\mu(1)\)会被计算16次,\(\mu(2)\)会被计算3次,\(\mu(3)\)会被计算1次。

So,\(\mu(1)\)会被计算\(\lfloor \frac{n}{1} \rfloor \times \lfloor \frac{m}{1} \rfloor\)次,\(\mu(2)\)会被计算\(\lfloor \frac{n}{2} \rfloor \times \lfloor \frac{m}{2} \rfloor\)次,\(\mu(3)\)会被计算\(\lfloor \frac{n}{3} \rfloor \times \lfloor \frac{m}{3} \rfloor\)次。

经过不完全归纳,我们得到了一个结论:\(\mu(d)\)被计算了\(\lfloor \frac{n}{d} \rfloor \times \lfloor \frac{m}{d} \rfloor\)次,从而我们只要枚举这个\(d\)就可以得到和变换前式子一样的结果:

\(\sum_{d=1}^{min(n,m)} \mu(d)\lfloor \frac{n}{d} \rfloor\lfloor \frac{m}{d} \rfloor\)

好的我们得到了一个\(O(Tn)\)的算法,但是这并不能够解决本题。

优化瓶颈在于这个\(d\)我们会枚举\(n\)次,但是实际上我们理性分析就可以发现,\(\lfloor \frac{n}{d} \rfloor\lfloor \frac{m}{d} \rfloor\)并不是和d一一对应的,\(\lfloor \frac{n}{d} \rfloor\)\(\lfloor \frac{m}{d} \rfloor\)分别都只有\(\sqrt{n}\)\(\sqrt{m}\)种取值,乘积经过画图可知,最多只有\(\sqrt{n} + \sqrt{m}\)种取值,因此我们将式子简单变形,就可以愉快的预处理了。

\(\sum_{d=1}^{min(n,m)} \mu(d)\sum_{d=1}^{min(n,m)}\lfloor \frac{n}{d} \rfloor\lfloor \frac{m}{d} \rfloor\)

前半部分线性筛处理,后半部分用学名”数论分块“的方法预处理前缀和就好啦。总复杂度\(O(n + T\sqrt{n})\)

Luogu P2257 YY的GCD

posted @ 2020-01-16 11:20  锦依卫Lijilai  阅读(194)  评论(0编辑  收藏  举报