LOJ2565 SDOI2018 旧试题 莫比乌斯反演、三元环计数

时间:2021-09-10 23:16:35

传送门


这道题的思路似乎可以给很多同时枚举三个量的反演题目提供一个很好的启发……

首先有结论:\(d(ijk) = \sum\limits_{x|i}\sum\limits_{y|j}\sum\limits_{z|k}[x \perp y][y \perp z][x \perp z]\)。正确性证明考虑:对于质数\(p\),设\(i,j,k\)中质因子\(p\)的个数为\(a,b,c\)。在\(x,y,z\)中至多只能有\(1\)个数含质因子\(p\),有以下情况:\(x,y,z\)中都没有\(p\),有1种;\(x\)中有\(p\),有\(a\)种;\(y\)中有\(p\),有\(b\)种;\(z\)中有\(p\),有\(c\)种。那么在\(\sum\limits_{x|i}\sum\limits_{y|j}\sum\limits_{z|k}[x \perp y][y \perp z][x \perp z]\)中\(p\)的贡献为\(a+b+c+1\),而在\(d(ijk)\)中\(p\)的贡献也是\(a+b+c+1\),所以两者等价。

设\(A \leq B \leq C\),\(\frac{x}{y}\)默认下取整。用上述结论化简式子:

\(\begin{align*} \sum\limits_{i=1}^A \sum\limits_{j=1}^B \sum\limits_{k=1}^C d(ijk) & = \sum\limits_{i=1}^A \sum\limits_{j=1}^B \sum\limits_{k=1}^C \sum\limits_{x|i}\sum\limits_{y|j}\sum\limits_{z|k}[x \perp y][y \perp z][x \perp z] \\ & = \sum\limits_{x = 1}^C \sum\limits_{y=1}^C \sum\limits_{z=1}^C[x \perp y][y \perp z][x \perp z] \frac{A}{x} \frac{B}{y} \frac{C}{z} \\ &= \sum\limits_{x = 1}^C \frac{A}{x} \sum\limits_{y=1}^C \frac{B}{y} \sum\limits_{z=1}^C \frac{C}{z} \sum\limits_{p | x , p | y} \mu(p) \sum\limits_{q | x , q | z} \mu(q) \sum\limits_{r | y , r | z} \mu(r) \\ &= \sum\limits_{p=1}^C \mu(p) \sum\limits_{q=1}^C \mu(q) \sum\limits_{r=1}^C \mu(r) \sum\limits_{p | x , q | x}\frac{A}{x} \sum\limits_{p | y , r | y} \frac{B}{y} \sum\limits_{q | z , r | z} \frac{C}{z} \end{align*}\)

\(\sum\limits_{p | x , q | x}\frac{A}{x} = \sum\limits_{lcm(p,q) | x}\frac{A}{x}\),这个可以枚举倍数\(O(nlogn)\)地预处理。所以我们现在需要一种快速的方法枚举\(pqr\)三个量。

不难发现一对\(p,q\)满足条件当且仅当\(\mu(p) \neq 0 , \mu(q) \neq 0 , lcm(p,q) \leq C\)。写一个\((10^5)^2\)的暴力发现好像只有……\(760741\)对满足条件!

那么实际上有用的\(p,q\)不多。不妨构出一个图,对于满足\(\mu(p) \neq 0 , \mu(q) \neq 0 , lcm(p,q) \leq C\)的\(p\)和\(q\)连边\((p,q)\),权值为\(lcm(p,q)\),那么在上述的枚举中\(p \neq q \neq r\)的三元组\((p,q,r)\)在图上对应一个三元环,并且能够轻松地通过这个三元环三条边的权值得到这个三元组的贡献。我们直接三元环计数统计这样的三元环的答案,因为图显然不是构造的所以跑不满根号。

因为打表是不现实的,所以我们还要解决如何快速算出满足\(\mu(p) \neq 0 , \mu(q) \neq 0 , lcm(p,q) \leq C\)的\(p\)和\(q\)。考虑枚举\(gcd(p,q)\),然后枚举\(p\)和\(q\),当\(lcm(p,q) > C\)时退出,枚举的时候check一下\(\mu(p) , \mu(q) , gcd(p,q)\)是否满足条件。这样的复杂度是\(O(Clog^2C)\)的。

上面三元环计算出了\(p \neq q \neq r\)的贡献,\(p=q=r\)的贡献直接枚举一遍,\(p = q \neq r\)的情况在枚举图上的边的时候可以一并计算。然后这道题就做完了。

据说这道题很卡常,所以注意一些细节:1、这道题中间变量用long long存的下,可以避免大量取模;2、存边用vector而不是前向星可以通过内存连续访问争取到更优秀的常数;3、必要的时候可以循环展开。

代码