「SDOI2018」旧试题
复习了一些数论手法。
考虑以下转换:
\[\sigma(ijk)=\sum\limits_{x|i}\sum\limits_{y|j}\sum\limits_{z|k}[\gcd(x,y)=1][\gcd(y,z)=1][\gcd(z,x)=1]
\]
证明就是对于第 \(t\) 个质因子,其在三个数中的出现次数是 \(a_t,b_t\) 和 \(c_t\),则因数个数是 \(\prod\limits_t(a_t+b_t+c_t+1)\)。考虑右式,计算这样的三元组数。每一个质因子分开考虑,无非就是其不出现,或者仅出现于三个数中的一个。用乘法原理计数一下,得到的也是 \(\prod\limits_t(a_t+b_t+c_t+1)\)。故上式成立。
稍微变形:
\[\sum\limits_{i=1}^A\sum\limits_{j=1}^B\sum\limits_{k=1}^C[\gcd(i,j)=1][\gcd(j,k)=1][\gcd(k,i)=1]\left\lfloor\dfrac{A}{i}\right\rfloor\left\lfloor\dfrac{B}{j}\right\rfloor\left\lfloor\dfrac{C}{k}\right\rfloor
\]
这个东西已经有三元环计数的雏形了,但是边数太多。考虑继续大力莫反,则式子变成了:
\[\sum\limits_{i=1}^{\min(A,B)}\sum\limits_{j=1}^{\min(B,C)}\sum\limits_{k=1}^{\min(C,A)}\mu(i)\mu(j)\mu(k)f\left(\left\lfloor\dfrac{A}{\text{lcm}(k,i)}\right\rfloor\right)f\left(\left\lfloor\dfrac{B}{\text{lcm}(i,j)}\right\rfloor\right)f\left(\left\lfloor\dfrac{C}{\text{lcm}(j,k)}\right\rfloor\right)
\]
其中 \(f(x)=\sum\limits_{i=1}^x\sigma(i)\),这可以预处理出来。
我们对这个东西建图,三元环计数。具体来说,就是把莫比乌斯函数值不为 \(0\) 的数当作点,将最小公倍数在 \(\max\{A,B,C\}\) 以内的两个数连边。令人惊讶的是,这样的图边数是在 \(8\times10^5\) 的级别的。跑一遍三元环就行了。
还有一个小问题,就是怎么建图。不能直接枚举每两个点之间有没有边。但是可以考虑先枚举两点的最大公因数,再枚举两个它的倍数,在最小公倍数过大时停止。虽然复杂度还是暴力的,但是因为边数少,所以实际上跑得很快。