P3768 简单的数学题
学杜教筛时做的模版题。
简单来说,题目让求:
\[\left(\sum_{i=1}^{n}\sum_{j=1}^{n}ij\gcd(i,j) \right) \bmod p
\]
化简一下式子,
\[\begin{aligned}
& \sum_{i=1}^{n}\sum_{j=1}^{n}ij\gcd(i,j)\\
=& \sum_{i=1}^{n}\sum_{j=1}^{n}ij\sum_{d|i,d|j}\varphi(d) \\
=& \sum_{d=1}^{n} d^2\varphi(d) \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j=1}^{\lfloor \frac{n}{d} \rfloor} ij \\
=& \sum_{d=1}^{n} d^2\varphi(d) \left(\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} i \right)^2 \\
=& \sum_{d=1}^{n} d^2\varphi(d) \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} i^3
\end{aligned}
\]
后面可以数论分块,考虑如何计算前面 \(d^2\varphi(d)\) 的系数的前缀和。显然是个积性函数,设 \(f(n) = n^2 \varphi(n) = \operatorname{id}^2(n)\varphi(n)\),构造 \(g(n)=\operatorname{id}^2(n)\),\(h(n)=\operatorname{id}^3(n)\),显然 \(h = f * g\)。
而 \(g\) 和 \(h\) 的前缀和就分别为 \(2\) 次和 \(3\) 次的自然数幂和,可以 \(O(1)\) 计算。于是可以使用杜教筛求出 \(f\) 的前缀和。
数论分块套杜教筛的复杂度仍为 \(O(n^\frac{2}{3})\),证明见这里。可以通过 \(n = 10^{10}\) 的全部数据。

浙公网安备 33010602011771号