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}\) 的全部数据。

posted @ 2022-08-07 19:39  yaoxi-std  阅读(51)  评论(0)    收藏  举报