CF2076G 题解

CF2076G 题解

数论分块,根号分治

首先观察到当 \(n\)\(p\) 进制下位数很多的时候,很难把 \(p\) 不同的情况放在一起处理,只能老老实实地把 \(n\) 展开成 \(p\) 进制的形式再计算。由于当 \(p^{2} < n\)\(n\)\(p\) 进制表示才多于 \(2\) 位,所以可以暴力处理 \(p < \sqrt{n}\) 时的情况,这样做的时间复杂度为 \(O(\sqrt{n})\) \(^{\ast}\)

\(^{\ast}\):这里时间复杂度的上界容易分析到 \(O(\sqrt{n} \log n)\),但实际上更紧的界是 \(O(\sqrt{n})\),见 CF 的这个评论

\(n\)\(p\) 进制表示不超过 \(2\) 位时,我们考虑一起处理。

\(p > n\) 时,\(n\)\(p\) 进制表示只有 \(1\) 位,翻转以后的值仍为 \(n\)

\(n\)\(p\) 进制表示只有 \(2\) 位时,\(n\) 可以被表示成 \(\lfloor n / p \rfloor p + (n \bmod p)\),于是 \(\operatorname{rev}(n, p) = (n \bmod p) + \lfloor n / p \rfloor\)

。考虑如何快速计算 \(\sum_{p = \lfloor \sqrt{n} \rfloor + 1}^{\min(n, k)} ((n \bmod p) + \lfloor n / p \rfloor)\)

(为了方便,下面省略求和符号中 \(p\) 的上下界。)

\(\lfloor n / p \rfloor\) 求和,容易想到数论分块,但 \(n \bmod p\) 这一项不太好处理。把它改写成 \(n - \lfloor n / p \rfloor p\),这样就统一凑成了整除的形式,于是待求式子变成

\[\begin{aligned} &\quad \sum_{p} ((n - \lfloor n / p \rfloor p)p + \lfloor n / p \rfloor) \\ &= \sum_{p} (np + \lfloor n / p \rfloor - p^{2}\lfloor n / p \rfloor) \\ &= n\sum_{p}p + \sum_{p} \lfloor n / p \rfloor + p^{2}\sum_{p} \lfloor n / p \rfloor \end{aligned} \]

第一个和式可以直接计算,剩下两个和式都可以通过数论分块在 \(O(\sqrt{n})\) 的时间内计算。

AC 记录

posted @ 2025-03-10 15:41  DengStar  阅读(17)  评论(0)    收藏  举报