Min25 筛

Min25 初定义

  • Min25 筛可以在 O(n34logn)O(n1e) 的复杂度下解决一类 积性函数 前缀和的问题
  • 对于质数 p ,要求 f(p) 是一个关于 p 的项数较少的多项式或可以快速求值,f(pc) 可以快速求值
  • 因为多项式可以拆成若干个单项式,所以我们只需要考虑求出 f(p)=pk 的前缀和,然后每一项加起来就行了

前置约定

  • 下面若无特殊规定 p 为全体质数集合

  • minp(x) 表示 x 的最小质因数

  • isprime(x) 表示 x 是否是一个质数

  • pk 表示第 k 个质数,特殊的 p0=1

分类

  • 对于质数和合数进行分类:

i=1nf(i)=1pnf(p)+1pen,1pnf(pe)(1in/pe,minp(i)>pf(i))

  • 那么整个式子就变成了两个部分,第一部分是所有质数的 f 之和,另一部分是枚举最小质因子后,求所有最小质因子大于这个质因子的 f 之和

第一部分

  • 我们考虑线性求出所有质数的 f

  • 我们考虑一个 DP 的思路,设 g(n,i) ,给定 k

g(n,j)=i=1n[isprime(i)||minp(i)>pj]ik

  • 这里的 k 就是给定的低阶多项式的一项

  • 注意到 ik完全积性函数

  • 其实这个式子就是欧拉筛 k 轮后剩下的数的 k 次方的和

  • 考虑 g(n,j1) 怎么转移过来

g(n,j)=g(n,j1)pjk(g(npj,j1)g(pj1,j1))

  • 大概即使考虑第 j 轮回筛掉哪些数,把这些数的 pj 这个质因数拿出来,因为是完全积性函数所以是正确的

  • 对于后面一项是为了将质数去掉

  • 注意到 g(pj1,j1) 实际上就是前 j1 个质数的 k 次方和

  • 对于一个合数 xminp(x)n ,所以实际上我们需要的 pjn

  • 我们设 Sn=i=1npik ,表示前 n 个质数的 k 次方和

  • 1n 的所有质数的 k 次方和其实就是 g(n,x) ,其中 px 是最后一个 n 的质数,我们记这个为 g(n)

  • 我们知道一个重要的结论:

nab=nab

  • 所以实际上我们只需要 O(n) 个点值

求解答案

  • 答案就是先求出所有质数的函数和,然后枚举一个 pe ,再枚举最小质因子大于 p 的数

  • S(n,x) 表示求 1n 中所有最小质因子大于 px 的函数值之和,可以发现答案就是 S(n,0)+1

  • 我们将满足条件的数分成两部分,第一部分就是大于 px 的质数,也就是 g(n)S(x) ,另一个部分就是最小质因子大于 px 的合数,考虑枚举最小质因子:

S(n,x)=g(n)Sx+pken&k>xf(pke)(S(npke,k)+[e1])

  • 然后我们就可以递归解决这个问题了
  • 这里其实就体现为什么要求 f(p)f(pc) 要可以快速求值
  • 根据某玄学定理,不需要记忆化

实现细节

  1. 预处理出前 nS 的值

  2. 对于 n 个我们可能会涉及到的点值进行编号,这里运用了一点技巧,我们将小于 n 的用一个数组存,大于 n 用一个数组存,当然也可以直接用 map 但是常数略大

  3. 然后递推求解 g 函数

  4. 递归求解 S 函数

基础例题

求莫比乌斯函数的前缀和,即 i=1nμ(i)

  • 这个函数是积性函数,并且 f(p)=(1),f(pe,e2)=0
  • g(x)=1 ,这个是完全积性函数,那么 g(n,0)=n+1 ,然后预处理出前 n 有多少个质数就可以了

求欧拉函数的前缀和,即 i=1nφ(i)

  • 这个也是积性函数,并且 f(p)=p1f(pe)=pepe1 ,可以快速插值
  • g(x)=x1 ,对于一次项 G1(n,0)=n(n+1)21,对于常数项就是 n+1 ,预处理出前 n 个质数和和个数就可以了

#6053. 简单的函数

  • 首先这个函数是积性函数,f(pc)=pc ,可以快速插值,那么就考虑质数的求法了
  • f(p)=p1 ,预处理好说,对于 G(n,0)=i=1ni1 对于奇偶数分一下类就行了

进阶例题

S(n,k) 表示范围为 [1,n] ,质数幂次和为 k 个数的个数,对于前 lognkS(n,k)

  • f(x)x 的质数幂次和,f(ab)=f(a)+f(b) ,感觉和积性函数没有半毛钱关系,但是其实满足 完全积性函数的特质 ,具体看 g 的求法
  • 我们一个个分析最终的式子
  • g(n,j,k)n,j 的意义同上,质数幂次和为 k 的数的个数

g(n,j,k)=g(n,j1,k)+(g(n/pj,j,k1)g(pj1,j1,k1))

  • 我们仍然可以将 pj 这一项提出来
  • 对于 n 个前缀的质数的贡献可以直接预处理出来,然后突然发现答案就是求 g(n,0,k) ,然后就没了

Min25 再定义

  • 所以 Min25 筛的本质应该是它的 dp 的思想,不一定要和积性函数有关,也不一定要是低阶多项式,这也导致了它的适用性较杜教筛要广,非常的灵活
  • 对于一个函数可以按照 Min25 的步骤一步步的去分析和构造辅助函数
posted @   Kzos_017  阅读(75)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示