Min25 筛
Min25 初定义
- Min25 筛可以在
或 的复杂度下解决一类 积性函数 前缀和的问题 - 对于质数
,要求 是一个关于 的项数较少的多项式或可以快速求值, 可以快速求值 - 因为多项式可以拆成若干个单项式,所以我们只需要考虑求出
的前缀和,然后每一项加起来就行了
前置约定
-
下面若无特殊规定
为全体质数集合 -
设
表示 的最小质因数 -
设
表示 是否是一个质数 -
设
表示第 个质数,特殊的
分类
- 对于质数和合数进行分类:
- 那么整个式子就变成了两个部分,第一部分是所有质数的
之和,另一部分是枚举最小质因子后,求所有最小质因子大于这个质因子的 之和
第一部分
-
我们考虑线性求出所有质数的
和 -
我们考虑一个 DP 的思路,设
,给定
-
这里的
就是给定的低阶多项式的一项 -
注意到
是 完全积性函数 -
其实这个式子就是欧拉筛
轮后剩下的数的 次方的和 -
考虑
怎么转移过来
-
大概即使考虑第
轮回筛掉哪些数,把这些数的 这个质因数拿出来,因为是完全积性函数所以是正确的 -
对于后面一项是为了将质数去掉
-
注意到
实际上就是前 个质数的 次方和 -
对于一个合数
, ,所以实际上我们需要的 -
我们设
,表示前 个质数的 次方和 -
到 的所有质数的 次方和其实就是 ,其中 是最后一个 的质数,我们记这个为 -
我们知道一个重要的结论:
- 所以实际上我们只需要
个点值
求解答案
-
答案就是先求出所有质数的函数和,然后枚举一个
,再枚举最小质因子大于 的数 -
设
表示求 到 中所有最小质因子大于 的函数值之和,可以发现答案就是 -
我们将满足条件的数分成两部分,第一部分就是大于
的质数,也就是 ,另一个部分就是最小质因子大于 的合数,考虑枚举最小质因子:
- 然后我们就可以递归解决这个问题了
- 这里其实就体现为什么要求
和 要可以快速求值 - 根据某玄学定理,不需要记忆化
实现细节
-
预处理出前
个 的值 -
对于
个我们可能会涉及到的点值进行编号,这里运用了一点技巧,我们将小于 的用一个数组存,大于 用一个数组存,当然也可以直接用map
但是常数略大 -
然后递推求解
函数 -
递归求解
函数
- 这里以 LG P5325 【模板】Min_25筛 为例子
- 参考代码
基础例题
求莫比乌斯函数的前缀和,即
- 这个函数是积性函数,并且
- 设
,这个是完全积性函数,那么 ,然后预处理出前 有多少个质数就可以了
求欧拉函数的前缀和,即
- 这个也是积性函数,并且
, ,可以快速插值 - 设
,对于一次项 ,对于常数项就是 ,预处理出前 个质数和和个数就可以了
- 首先这个函数是积性函数,
,可以快速插值,那么就考虑质数的求法了 ,预处理好说,对于 对于奇偶数分一下类就行了
进阶例题
设
表示范围为 ,质数幂次和为 个数的个数,对于前 个 求
- 设
为 的质数幂次和, ,感觉和积性函数没有半毛钱关系,但是其实满足 完全积性函数的特质 ,具体看 的求法 - 我们一个个分析最终的式子
- 设
, 的意义同上,质数幂次和为 的数的个数
- 我们仍然可以将
这一项提出来 - 对于
个前缀的质数的贡献可以直接预处理出来,然后突然发现答案就是求 ,然后就没了
Min25 再定义
- 所以 Min25 筛的本质应该是它的 dp 的思想,不一定要和积性函数有关,也不一定要是低阶多项式,这也导致了它的适用性较杜教筛要广,非常的灵活
- 对于一个函数可以按照 Min25 的步骤一步步的去分析和构造辅助函数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】