Powerful Number 筛

Powerful Number 筛(PN 筛)可以解决一些求积性函数前缀和的问题。要求能构造出一个积性函数 g,满足:

  • g 容易求前缀和;
  • 对于质数 pf(p)=g(p)

称一个数 xPowerful Number(PN)当且仅当 x 的质因数分解中,所有质因数的指数都 21 是 PN。

有结论 n 的 PN 有 O(n) 个。并且若线性筛出 n 的所有质数,枚举每个质数的指数,就可以在 O(n) 的时间复杂度内搜索出所有 PN。

假设我们已经构造出一个满足条件的 g。假设有一个积性函数 h,满足 f=gh。那么有 f(p)=g(1)h(p)+g(p)h(1)=g(p)+h(p),又因为 f(p)=g(p),所以 h(p)=0。所以 h(x) 有值当且仅当 x 是 PN

推一下式子:

i=1nf(i)=ijng(i)h(j)=i=1nh(i)j=1nig(j)

因此我们只用枚举所有 n 的 PN,然后快速计算 j=1nig(j) 即可。

问题来到如何计算 h(i)。因为 h 是积性函数,所以只用考虑如何计算 h(pk)。根据 f=gh 有:

f(pk)=i=0kg(pi)h(pki)

因此:

h(pk)=f(pk)i=0k1g(pki)h(pi)

进而可以暴力在 O(n) 的时间复杂度内计算。

g 的前缀和能 O(1) 计算,那么 PN 筛的时间复杂度为 O(n)

例题

1. P5325 【模板】Min_25 筛

考虑构造 g=(idφ),那么 g 的前缀和可以使用杜教筛计算(id2=(idφ)id)。

时间复杂度 O(n23),瓶颈在杜教筛。

2. 2023.10.3 NOIP 模拟赛 T2 数论

考虑构造 g=Iid。那么 i=1ng(i)=i=1nini。若使用整除分块计算,设 P 为 PN 集合,时间复杂度 O(xPnx)=O(nlogn)

3. LOJ6053 简单的函数

考虑构造:

g(x)={3φ(x)2xφ(x)2x

那么 i=1ng(i)=i=1nφ(i)+2i=1n2φ(2i),可以杜教筛解决。

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