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 协议之条款下提供,附加条款亦可能应用