久未放晴的天|

TulipeNoire

园龄:1年10个月粉丝:18关注:17

「SDOI2018」旧试题

复习了一些数论手法。

考虑以下转换:

σ(ijk)=x|iy|jz|k[gcd(x,y)=1][gcd(y,z)=1][gcd(z,x)=1]

证明就是对于第 t 个质因子,其在三个数中的出现次数是 at,btct,则因数个数是 t(at+bt+ct+1)。考虑右式,计算这样的三元组数。每一个质因子分开考虑,无非就是其不出现,或者仅出现于三个数中的一个。用乘法原理计数一下,得到的也是 t(at+bt+ct+1)。故上式成立。

稍微变形:

i=1Aj=1Bk=1C[gcd(i,j)=1][gcd(j,k)=1][gcd(k,i)=1]AiBjCk

这个东西已经有三元环计数的雏形了,但是边数太多。考虑继续大力莫反,则式子变成了:

i=1min(A,B)j=1min(B,C)k=1min(C,A)μ(i)μ(j)μ(k)f(Alcm(k,i))f(Blcm(i,j))f(Clcm(j,k))

其中 f(x)=i=1xσ(i),这可以预处理出来。

我们对这个东西建图,三元环计数。具体来说,就是把莫比乌斯函数值不为 0 的数当作点,将最小公倍数在 max{A,B,C} 以内的两个数连边。令人惊讶的是,这样的图边数是在 8×105 的级别的。跑一遍三元环就行了。

还有一个小问题,就是怎么建图。不能直接枚举每两个点之间有没有边。但是可以考虑先枚举两点的最大公因数,再枚举两个它的倍数,在最小公倍数过大时停止。虽然复杂度还是暴力的,但是因为边数少,所以实际上跑得很快。

本文作者:TulipeNoire

本文链接:https://www.cnblogs.com/TulipeNoire/p/18725450/P4619

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   TulipeNoire  阅读(5)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起