专栏文章

min_25 筛

个人记录参与者 4已保存评论 3

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
3 条
当前快照
1 份
快照标识符
@miqupu29
此快照首次捕获于
2025/12/04 11:03
3 个月前
此快照最后确认于
2025/12/04 11:03
3 个月前
查看原文
学习笔记。
只追求遇到的时候能够快速写出来。

min_25 的复杂度依赖于这个式子:
pprime,pn[p2 的块筛个数]=O(n3/4lnn)\sum_{p\in\text{prime},p\le\sqrt n}[\ge p^2\text{ 的块筛个数}]=O\left(\frac{n^{3/4}}{\ln n}\right)
min_25 可以求解某积性函数 ff 块筛处的前缀和,条件:
  • 存在一个容易求前缀和的积性函数 gg 在质数处点值与 f(p)f(p) 相同
  • f(pk),g(pk)f(p^k),g(p^k) 可以快速求值

min_25 使用如下过程求解 ff 的块筛前缀和:
  • 第一部分:从 gg 块筛前缀和,得到 gg 块筛处,质数位置前缀和,由于 g(p)=f(p)g(p)=f(p),也即 ff 块筛处,质数位置前缀和
  • 第二部分,由 ff 块筛处,质数位置前缀和,得到 ff 块筛处前缀和

第一部分:
G(n,a)G(n,a) 表示 [1,n][1,n] 的数里,埃筛筛完前 aa 个质数后没被筛掉的数的 gg 值的和,具体地,包含以下三种数:
  • 11
  • nn 以内的质数
  • nn 以内的,最小质因子 >pa>p_a 的合数
那么我们有如下转移式:
G(n,a)=G(n,a1)i=1c1g(pai)(G(npai,a)[前 a 个质数的 g 值和])g(pac)+g(pa)G(n,a)=G(n,a-1)-\sum_{i=1}^{c-1}g(p_a^i)\left(G\left(\left\lfloor\frac{n}{p_a^i}\right\rfloor,a\right)-[前\ a\ 个质数的\ g\ 值和]\right)-g(p_a^c)+g(p_a)
其中 cc 为最大的非负整数使得 pacnp_a^c\le n
初值为 G(n,0)=i=1ng(i)G(n,0)=\sum_{i=1}^ng(i),最后得到 G(n,π(n))=1pn,pprimeg(p)G(n,\pi(\sqrt n))=\sum_{1\le p\le n,p \in\text{prime}}g(p)
由于 panp_a\le\sqrt n,所以我们可以预先线性筛出来前 n\sqrt n 个位置的 gg 值,这样就可以 O(1)O(1) 回答质数处的前缀和
直接写上面的转移式即可,注意到只有 c2c\ge2 的位置才有意义,所以我们可以只枚举 pa2\ge p_a^2 的块筛,那么复杂度由最开始的式子,是 O(n3/4/lnn)O(n^{3/4}/\ln n)

第二部分:
F(n,a)F(n,a) 表示 [1,n][1,n] 的数里,埃筛筛完前 aa 个质数后没被筛掉的数的 ff 值之和
那么我们有如下转移式:
F(n,a1)=F(n,a)+i=1c1f(pai)(F(npai,a)[前 a 个质数的 f 值和])+f(pac)f(pa)F(n,a-1)=F(n,a)+\sum_{i=1}^{c-1}f(p_a^i)\left(F\left(\left\lfloor\frac{n}{p_a^i}\right\rfloor,a\right)-[前\ a\ 个质数的\ f\ 值和]\right)+f(p_a^c)-f(p_a)
其中 cc 为最大的非负整数使得 pacnp_a^c\le n
初值为 F(n,π(n))=1pn,pprimef(p)=G(n,π(n))F(n,\pi(\sqrt n))=\sum_{1\le p\le n,p\in\text{prime}}f(p)=G(n,\pi(\sqrt n)),最后得到 F(n,0)=i=1nf(i)F(n,0)=\sum_{i=1}^nf(i)
复杂度分析与上面类似。

实际上,如果求块筛内质数个数的话,可以直接用第一部分,递推式为:
G(n,a)=G(n,a1)(G(npa,a1)a)G(n,a)=G(n,a-1)-\left(G\left(\left\lfloor\frac n{p_a}\right\rfloor,a-1\right)-a\right)

评论

3 条评论,欢迎与作者交流。

正在加载评论...