学习笔记。
只追求遇到的时候能够快速写出来。
min_25 的复杂度依赖于这个式子:
p∈prime,p≤n∑[≥p2 的块筛个数]=O(lnnn3/4)
min_25 可以求解某积性函数
f 块筛处的前缀和,条件:
-
存在一个容易求前缀和的积性函数
g 在质数处点值与
f(p) 相同
-
f(pk),g(pk) 可以快速求值
min_25 使用如下过程求解
f 的块筛前缀和:
-
第一部分:从
g 块筛前缀和,得到
g 块筛处,质数位置前缀和,由于
g(p)=f(p),也即
f 块筛处,质数位置前缀和
-
第二部分,由
f 块筛处,质数位置前缀和,得到
f 块筛处前缀和
第一部分:
令
G(n,a) 表示
[1,n] 的数里,埃筛筛完前
a 个质数后没被筛掉的数的
g 值的和,具体地,包含以下三种数:
-
-
-
n 以内的,最小质因子
>pa 的合数
那么我们有如下转移式:
G(n,a)=G(n,a−1)−i=1∑c−1g(pai)(G(⌊pain⌋,a)−[前 a 个质数的 g 值和])−g(pac)+g(pa)
其中
c 为最大的非负整数使得
pac≤n
初值为
G(n,0)=∑i=1ng(i),最后得到
G(n,π(n))=∑1≤p≤n,p∈primeg(p)
由于
pa≤n,所以我们可以预先线性筛出来前
n 个位置的
g 值,这样就可以
O(1) 回答质数处的前缀和
直接写上面的转移式即可,注意到只有
c≥2 的位置才有意义,所以我们可以只枚举
≥pa2 的块筛,那么复杂度由最开始的式子,是
O(n3/4/lnn) 的
第二部分:
令
F(n,a) 表示
[1,n] 的数里,埃筛筛完前
a 个质数后没被筛掉的数的
f 值之和
那么我们有如下转移式:
F(n,a−1)=F(n,a)+i=1∑c−1f(pai)(F(⌊pain⌋,a)−[前 a 个质数的 f 值和])+f(pac)−f(pa)
其中
c 为最大的非负整数使得
pac≤n
初值为
F(n,π(n))=∑1≤p≤n,p∈primef(p)=G(n,π(n)),最后得到
F(n,0)=∑i=1nf(i)
复杂度分析与上面类似。
实际上,如果求块筛内质数个数的话,可以直接用第一部分,递推式为:
G(n,a)=G(n,a−1)−(G(⌊pan⌋,a−1)−a)