杜教筛和Min_25筛

学一遍忘一遍,忘一遍学一遍,生命就是在对抗熵增

这两个玩意儿都是用来求积性函数前缀和的(满足对应要求的非积性函数也可以求一下)


杜教筛

性质要求相对高一些

i=1nf(i) ,需要找到 g(i),h(i),满足 h=fgf,g 都可以快速求解前缀和

S(n)=i=1nf(i),推推式子:

i=1nh(i)=i=1nd|if(id)g(d)=d=1ng(d)S(nd)

g(1)S(n)=i=1nh(i)d=1ng(d)S(nd)

递归求解即可,复杂度为 O(n34)

线性筛预处理前 n23 个数后复杂度优化为 O(n23)


Min_25 筛

许多非积性函数也可以用这玩意求解,本质上是个优化埃氏筛的 DP

i=1nf(i)

预处理不大于 n 的质数,下用 pi 表示第 i 个质数

先求质数部分的答案

质数部分求解时用一个或多个完全积性函数拟合求解的函数,只要满足质数部分答案相同即可

令该完全积性函数其为 f0

要求 f0 可以快速求前缀和以及某一个质数的幂对应的函数值

g(n,i) 表示前 n 个数中质数以及最小质因数大于 pi 的合数的答案和(可以看作埃氏筛筛了前 i 个质数后的答案)

初值 g(n,0)i=1nf0(i)

pi>n 时,显然不会再筛掉任何数了,g(n,i)=g(n,i1)

pin 时,转移为:

g(n,i)=g(n,i1)f(pi)(g(npi,i1)j=1i1f(pj))

然后就可以求原函数的答案了

S(n,i) 为前 n 个数中最小质因数不小于于 pif(x) 之和

有递推式:

S(n,i)=g(n,|P|)i=1i1f(pi)+j=ipj2ne=1pjen(f(pje)S(npje,j+1)+f(pje+1))

答案为 S(n,1)+f(1)

复杂度为 O(n34logn),也有人说是 O(n1ϵ),好像比杜教筛要优一点


完结散花

posted @   ZhangCW_QwQ  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示