Powerful Number 筛
定义
Powerful Number(以下简称 PN)筛类似于杜教筛,或者说是杜教筛的一个扩展,可以拿来求一些积性函数的前缀和。
要求:
- 存在一个函数
满足: 是积性函数。 易求前缀和。- 对于质数
, 。
假设现在要求积性函数
Powerful Number
定义:对于正整数
性质 1:所有 PN 都可以表示成
证明:若
性质 2:
证明:考虑枚举
那么如何求出
PN 筛
首先,构造出一个易求前缀和的积性函数
然后,构造函数
对于素数
现在,根据
下面考虑计算
过程
- 构造
- 构造快速计算
的方法 - 计算
- 搜索 PN,过程中累加答案
- 得到结果
对于第 3 步,可以直接根据公式计算,可以使用枚举法预处理打表,也可以搜索到了再临时推。
性质
以使用第二种方法计算
对于第一部分,根据
对于搜索部分,由于
特别地,若借助杜教筛计算 std::map
和 std::unordered_map
)记录较大的值,则杜教筛过程中用到的 std::map
中记录的,这一点可以直接用程序验证。
对于空间复杂度,其瓶颈在于存储
例题
Luogu P5325【模板】Min_25 筛
题意:给定积性函数
易得
考虑使用杜教筛求
之后
此外,此题还可以直接求出
再根据
「LOJ #6053」简单的函数
给定
易得:
构造
易证
下面考虑求
记
当
当
综上,有
习题
参考资料
贡献者:@WenzelTian@lrherqwq@xyf007@mgt@kenlig@Great-designer
本页面最近更新:2/3/2023, 12:00:00 AM,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用