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 ∀1≤i≤m,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} pici−3归入 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)
∫1n3x2ndx=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) ∀p∈P,g(p)=f(p)。
假定有函数 h h h满足 f = g ∗ h f=g*h f=g∗h,这里的 ∗ * ∗是狄利克雷卷积,显然 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) ∀p∈P,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 ∀p∈P,h(p)=0。由于 h h h是积性函数,所以有 ∀ n ∉ P N , h ( n ) = 0 \forall n \not \in \mathbf{PN},h(n)=0 ∀n∈PN,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(pc−i),移项得 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(pc−i)。当然,也有可能 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=1∑nf(i)=i=1∑nd∣i∑g(d)h(di)=d=1∑nh(d)i=1∑⌊dn⌋g(i)=1≤d≤n,d∈PN∑h(d)G(⌊dn⌋)
复杂度
在 n \sqrt n n内大约有 O ( n log n ) O(\frac{\sqrt n}{\log \sqrt n}) O(lognn)个质数,对于一个质数 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(lognn(logn)2)=O(nlogn)。
对于 g g g的计算,可能 O ( 1 ) O(1) O(1)算,如果比较麻烦,那么套杜教筛 O ( n 2 3 ) O(n^{\frac{2}{3}}) O(n32)也是可以的。
总结
PN筛一般步骤如下:
- 构造 g g g和快速计算 G G G的方法
- 找PN并计算 h h h
- 套式子计算 F F F
计算 G G G时可能要用杜教筛,复杂度似乎比直接杜教筛更劣,但是考虑到对 f f f杜教筛有时候可能构造不出来合适的 g , h g,h g,h所以PN筛还是很有用的。