线性预处理整除分块

本文搬运自本人高中时期CSDN博客,若图片加载不出来,可到原文查看:https://blog.csdn.net/zhangtingxiqwq/article/details/132596085

有时候要求前 nn 个:
在这里插入图片描述

暴力整除分块是 O(nn)O(n\sqrt n) 的,但可以线性预处理

首先我们让 ii 取遍 0 到正无穷,考虑差分。

思考 n1n-1 变成 nn ,哪些 ii 会发生变化。只有 nn 的因数,所以差分出来其实就是 nn因数个数 。这个可以线性筛 O(n)O(n) 预处理。

然后再做个前缀和就还原成原数组了。

可于杜教筛的分类讨论。