莫比乌斯反演学习笔记
莫比乌斯反演:
对于两个数论函数\(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})\)