Powerful Number筛

Powerful Number筛

要求积性函数 f ( n ) f(n) f(n)的前缀和 F ( n ) F(n) F(n)

Powerful Number(PN)

定义:一个数 n = ∏ i = 1 m p i c i n=\prod_{i=1}^{m}p_i^{c_i} n=i=1mpici是PN当且仅当 ∀ 1 ≤ i ≤ m , c i > 1 \forall 1 \leq i\leq m,c_i>1 ∀1im,ci>1

性质1:所有PN都可以写成 a 2 b 3 a^2b^3 a2b3的形式

证明1:当 c i c_i ci为偶数时 p i c i p_i^{c_i} pici归入 a a a,否则 p i 3 p_i^{3} pi3归入 b b b p i c i − 3 p_i^{c_i-3} pici3归入 a a a

性质2 n n n以内的PN只有 O ( n ) O(n) O(n)

证明2:根据证明1,一组 ( a , b ) (a,b) (a,b)可以唯一的还原出一个PN,并且每个PN都可以唯一对应一组 ( a , b ) (a,b) (a,b),所以只需枚举 a a a然后算 b b b个个数的和即可证明:
∫ 1 n n x 2 3 d x = O ( n ) \int_{1}^{\sqrt{n}}\sqrt[3]{\frac{n}{x^2}}\mathrm{d}x=O(\sqrt n) 1n 3x2n dx=O(n )
找PN可以先把 n \sqrt n n 内的质数筛出来然后爆搜,由于PN只有 O ( n ) O(\sqrt n) O(n )个,所以复杂度就是 O ( n ) O(\sqrt n) O(n )

PN筛

构造一个易于求前缀和的积性函数 g g g,且满足 ∀ p ∈ P , g ( p ) = f ( p ) \forall p\in P,g(p)=f(p) pP,g(p)=f(p)

假定有函数 h h h满足 f = g ∗ h f=g*h f=gh,这里的 ∗ * 是狄利克雷卷积,显然 h h h也是积性函数。

根据 h h h的假设, ∀ p ∈ P , f ( p ) = g ( 1 ) h ( p ) + g ( p ) h ( 1 ) = g ( p ) + h ( p ) \forall p\in P,f(p)=g(1)h(p)+g(p)h(1)=g(p)+h(p) pP,f(p)=g(1)h(p)+g(p)h(1)=g(p)+h(p),再根据 g g g的构造,可以得知 ∀ p ∈ P , h ( p ) = 0 \forall p \in P,h(p)=0 pP,h(p)=0。由于 h h h是积性函数,所以有 ∀ n ∉ P N , h ( n ) = 0 \forall n \not \in \mathbf{PN},h(n)=0 nPN,h(n)=0,那么 h h h只有 O ( n ) O(\sqrt n) O(n )个有效值。

前面都是假设存在这样的 h h h,现在考虑怎么计算 h h h

显然只要能算 h ( p c ) h(p^c) h(pc)就行了,根据假设 f ( p c ) = ∑ i = 0 c g ( p i ) h ( p c − i ) f(p^c)=\sum_{i=0}^{c}g(p^i)h(p^{c-i}) f(pc)=i=0cg(pi)h(pci),移项得 h ( p c ) = f ( p c ) − ∑ i = 1 c g ( p i ) h ( p c − i ) h(p^c)=f(p^c)-\sum_{i=1}^{c}g(p^i)h(p^{c-i}) h(pc)=f(pc)i=1cg(pi)h(pci)。当然,也有可能 h ( p c ) h(p^c) h(pc)存在只用 p , c p,c p,c表达的式子,可以先表后猜再证。综上, h h h是一定存在的,假设成立。

那么现在唯一剩下的就是怎么算 F F F了,根据 h h h的假设,有如下:
F ( n ) = ∑ i = 1 n f ( i ) = ∑ i = 1 n ∑ d ∣ i g ( d ) h ( i d ) = ∑ d = 1 n h ( d ) ∑ i = 1 ⌊ n d ⌋ g ( i ) = ∑ 1 ≤ d ≤ n , d ∈ P N h ( d ) G ( ⌊ n d ⌋ ) \begin{aligned} F(n) & =\sum_{i=1}^{n}f(i)\\ & =\sum_{i=1}^{n}\sum_{d|i}g(d)h(\frac{i}{d})\\ & =\sum_{d=1}^{n}h(d)\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}g(i)\\ & =\sum_{1\leq d\leq n,d \in \mathbf{PN}}h(d)G(\lfloor \frac{n}{d} \rfloor) \end{aligned} F(n)=i=1nf(i)=i=1ndig(d)h(di)=d=1nh(d)i=1dng(i)=1dn,dPNh(d)G(⌊dn⌋)

复杂度

n \sqrt n n 内大约有 O ( n log ⁡ n ) O(\frac{\sqrt n}{\log \sqrt n}) O(logn n )个质数,对于一个质数 p p p,指数最多是 O ( log ⁡ n ) O(\log \sqrt n) O(logn ),计算 h ( p c ) h(p^c) h(pc)时复杂度为 O ( c ) O(c) O(c),所以前面处理 h h h的复杂度为 O ( n log ⁡ n ( log ⁡ n ) 2 ) = O ( n log ⁡ n ) O(\frac{\sqrt n}{\log \sqrt n}(\log \sqrt n)^2)=O(\sqrt n \log \sqrt n) O(logn n (logn )2)=O(n logn )

对于 g g g的计算,可能 O ( 1 ) O(1) O(1)算,如果比较麻烦,那么套杜教筛 O ( n 2 3 ) O(n^{\frac{2}{3}}) O(n32)也是可以的。

总结

PN筛一般步骤如下:

  1. 构造 g g g和快速计算 G G G的方法
  2. 找PN并计算 h h h
  3. 套式子计算 F F F

计算 G G G时可能要用杜教筛,复杂度似乎比直接杜教筛更劣,但是考虑到对 f f f杜教筛有时候可能构造不出来合适的 g , h g,h g,h所以PN筛还是很有用的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值