显然一个合数的最大真因子等于它自身除以它的最小质因子。
这个很容易用欧拉筛来求,然鹅 l≤r≤5⋅109……
首先转化为前缀和相减,问题变成求所有不大于 n 的正整数的最大真因子。
欧拉筛不是很好优化,但是如果是埃筛,可以扩展到亚线性复杂度(即 Min_25 筛的前一部分)。
我们考虑用 Min_25 筛的做法来求不大于 n 的质数之和。
为什么不直接求呢?因为这个算法本来是用来筛积性函数在质数处的点值的。
观察这个算法递推式的推导过程,其实第 k 轮转移减去的数就是埃筛第 k 轮筛去的数之和。
然鹅我们发现,这些数刚好就是所有最小质因子为 pk 的数(其中 pk 表示第 k 个质数)。
于是在转移的时候另外统计一下答案,即直接把减去的数除以 pk 后加入答案。
(我觉得这道题是熟悉 Min_25 筛思想的好题)
代码:
1 |
|