莫比乌斯的败北,欧拉的完全胜利

事情是这样的,我在做 P7496 的时候遇到了一个这个式子:

\[\sum_{i=1}^n\left(\sum_{j=1}^n\gcd(a_i,b_j)\right)^2 \]

\(a,b\) 的值域都是 \(\mathcal O(n)\)

但是如果单纯地莫比乌斯反演,需要对 \(a_i\) 的每一个因子做一遍调和级数的容斥,是 \(\mathcal O(n\ln^2 n)\) 的。

但是转而去尝试欧拉反演之后,发现复杂度变成了 \(\mathcal O(n\ln n)\)!!

为啥复杂度会不一样呢?

咨询了子达哥,他的做法是直接容斥,然后递推容斥系数,也是 \(\mathcal O(n\ln n)\)

对比欧拉反演的式子:

\[\sum_{i=1}^n\left(\sum_{x|a_i}\varphi(x)s_x\right) \]

其中 \(s_x=\sum_{i=1}^n [x|b_i]\),可以调和级数求出。

发现这本质上就是容斥,递推出的容斥系数是 \(\varphi(i)\)

我们把莫比乌斯函数的式子写出来:

\[\sum_{i=1}^n\left(\sum_{d|a_i}d\sum_{d|x,x|a_i} s_x\mu\left(\frac xd\right)\right) \]

交换求和顺序:

\[\sum_{i=1}^n\left(\sum_{x|a_i} s_x\sum_{d|x}\mu\left(\frac xd\right)d\right) \]

所以我们得到一个恒等式:

\[\sum_{d|x}\mu\left(d\right)\frac xd=\varphi(x) \]

写成狄利克雷卷积的形式就是 \(\mu * \mathrm{id}=\varphi\)。证明并不困难,考虑 \(\varphi\) 的定义,枚举 \(\gcd\) 再容斥就能得到这个式子。

到这里,开头的问题得以解决:复杂度多出的那个 \(\log\) 是在计算一个可以 \(\mathcal O(1)\) 做的容斥系数。

这也启发我们:在一些数论题目中,复杂度迟迟降不下去时可以考虑引入新的数论函数,或许能够好处理的形式。

posted @ 2022-09-22 18:55  zzt1208  阅读(50)  评论(0编辑  收藏  举报