浅谈整除分块
学莫反的时候,发现许多题都会用到一个小技巧,于是有了下面这篇博文~
引入
有问题如下:求
\[\sum_{i = 1}^{n} \left \lfloor \frac{n}{i} \right \rfloor
\]
其中 \(n \leq 10 ^ 9\)
考虑暴力做法枚举每一个 \(i\) 并对 \(\left \lfloor \frac{n}{i} \right \rfloor\) 求和,时间复杂度为 \(O(n)\)。
下面考虑优化。
对于一个数 \(n\),将 \(\left \lfloor \frac{n}{i} \right \rfloor\) 的值打表后发现,表中有大量重复元素,那么是否可以将“将相同的数依次相加”改为“相同数的个数乘以这个数”呢?答案是可以的。
如果我们将 \(\left \lfloor \frac{n}{i} \right \rfloor\) 值相同的放在一个块里,那么会有如下结论:
结论1:块数小于等于 \(\sqrt{n}\)
结论2:每一块的右端点 \(r\) 等于 \(\left \lfloor\frac{n}{\left \lfloor \frac{n}{l} \right \rfloor} \right \rfloor\)
证明不会。
因此可以保证复杂度控制在 \(O(\sqrt{n})\) 左右。
例题:

浙公网安备 33010602011771号