有时候要求前
n
n
n 个:
暴力整除分块是
O
(
n
n
)
O(n\sqrt n)
O(nn) 的,但可以线性预处理
首先我们让 i i i 取遍 0 到正无穷,考虑差分。
思考 n − 1 n-1 n−1 变成 n n n,哪些 i i i 会发生变化。只有 n n n 的因数,所以差分出来其实就是 n n n 的因数个数。这个可以线性筛 O ( n ) O(n) O(n) 预处理。
然后再做个前缀和就还原成原数组了。
可于杜教筛的分类讨论。