Min_25 Sieve 学习笔记

这个东西不是人想的。

解决问题:积性函数前缀和。

适用条件:可以快速计算 f(p) 的前缀和,f(pk) 可以被表示成若干完全积性函数的线性组合(指对应项可以快速组合出来)。

时空复杂度:就当是 O(n34logn+n1ϵ)O(n)

以下默认 f(p) 为关于 p 的单项式,pi 为第 i 个质数。

求质数处的前缀和

我们需要对于每个能被表示成 nx 的数,求所有在其前的质数 pf(p)。注意到一个数的最小质因子小等于 n,我们设计一个 dp:gi,j 表示最小质因子大于 pi[1,j] 的所有数的 f 之和。转移时把最小质因子为 的 pi 数的 f 全部删去,即得转移,注意容斥掉前面的质数的贡献:

gi,j=gi1,jf(pi)(gi1,j/pikif(pk))

这就体现出完全积性的重要性。求和号部分可以在线筛质数的时候预处理出来。第一维显然可以滚动数组优化掉,而对于第二维,nx 只有 O(n) 个,预处理出来,大于 n 的编号为 n/n 即可。

我们把筛去所有最小质因子后的得到的 dp 数组记为 g

求原函数前缀和

sn,i 表示 [1,n] 最小质因子大于 pi 的所有数的 f 之和。枚举最小质因子及其次数,得到转移

sn,i=gnjif(pj)+pktnf(pkt)(sn/pkt,k+1)+[t>1])

根据神奇的复杂度分析,可以直接递归下去做。

最后加上 1 的贡献。

posted @   Aphrosia  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示