Min_25 筛
定义
从此种筛法的思想方法来说,其又被称为「Extended Eratosthenes Sieve」。
由于其由 Min_25 发明并最早开始使用,故称「Min_25 筛」。
性质
其可以在
要求:
记号
- 如无特别说明,本节中所有记为
的变量的取值集合均为全体质数。 ,即 为质数时其值为 ,否则为 。 :全体质数中第 小的质数(如: )。特别地,令 。 ,即 的最小质因数。特别地, 时,其值为 。
解释
观察
考虑如何求出
最后一步推导基于这样一个事实:对于满足
其边界值即为
假设现在已经求出了所有的
- 直接按照递推式计算。
- 从大到小枚举
转移,仅当 时转移增加值不为零,故按照递推式后缀和优化即可。
现在考虑如何计算
观察求
一般情况下,
那么对于每个
分开考虑每个
Notice:
是完全积性函数!
于是设
对于一个合数
考虑
对于转移,考虑埃筛的过程,分开讨论每部分的贡献,有:
- 对于
的部分, 值不变,即 。 - 对于
的部分,被筛掉的数必有质因子 ,即 。 - 对于第二部分,由于
,故会有 的 被减去。这部分应当加回来,即 。
则有:
复杂度分析
对于
对于第二种方法,其本质即为洲阁筛的第二部分,在洲阁论文中也有提及(6.5.4),其时间复杂度被证明为
对于
考虑对于每个
对于空间复杂度,可以发现不论是
首先,通过一次数论分块可以得到所有的有效值,用一个大小为
然后分开考虑小于等于
这样,就可以使用两个大小为
过程
对于
对于
对于
相应地,
用 Extended Eratosthenes Sieve 求 积性函数
- 如何快速(一般是线性时间复杂度)筛出前
个 值; 的多项式表示;- 如何快速求出
。
明确上述几点之后按顺序实现以下几部分即可:
- 筛出
内的质数与前 个 值; - 对
多项式表示中的每一项筛出对应的 ,合并得到 的所有 个有用点值; - 按照
的递推式实现递归,求出 。
例题
求莫比乌斯函数的前缀和
求
易知
直接筛即可得到
求欧拉函数的前缀和
求
首先易知
对于
对于
筛两次加起来即可得到
「LOJ #6053」简单的函数
给定
易知
此处给出一种 C++ 实现:
贡献者:@queenwen@WenzelTian@kenlig@Great-designer
本页面最近更新:2/3/2023, 12:00:00 AM,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用