「学习笔记」 杜教筛

Description

求积性函数前缀和的有力工具,形式化地,对于积性函数 f(x),求

i=1nf(i)

这里设两个函数 g,h,其中 h=fg(狄利克雷卷积),以及 S(n)=i=1nf(i)

i=1nh(i)=i=1nj|if(j)×g(ij)

考察每个 g(i)LHS 的贡献有:

i=1nh(i)=i=1ng(i)S(ni)

提出来第一项就得到了 g(1)S(n),直接得到下式:

g(1)S(n)=i=1nh(i)i=2ng(i)S(ni)

可以整除分块并递归,可以先预处理 106 项,但是主要问题是函数 f,g 的选择

最基础的是 μI=ϵ,φI=id,(φ×id)id=id2


复杂度证明

考虑所有递归中出现的 n 进行求和,大体看做所有 ni,而每次递归一个 n 耗费的复杂度是 n,那么复杂度写作下式:

T(n)=i=1nni+i

加号后的一项总和明显小于加号前的一项的总和,加号前的一项总量为

i=1nni=1nnx dx=nn

定积分求解即先提出定量 n,求出不定积分上下界的 1,(n)12+1 再作差

直接做复杂度就是 Θ(n34),尝试预处理 n1t 的函数前缀和,扩大递归终止条件的范围,这时候缩小积分上界至 nt 结果是 n2t,中和一下预处理 n13 时复杂度达到了 Θ(n23)

个人认为在多数 n=109 的题目中由于记忆化的 std::maplog 复杂度所以多预处理一些总归是没错的

另外这里的证明方式是考虑的递归总量,那么具体问题中如果涉及了外层套整除分块内次求积性函数区间和,使用杜教筛总复杂度不变

例题

BZOJ3512

考虑对每个 N 的每个 n 计算 i=1mφ(ni),尝试展开 φ(ni)

不难根据 φ 函数的定义式,我们只关注每个质数的第一次出现,所以设 qn 所有质因子的单次乘积

i=1mφ(ni)=nqi=1mφ(i)φ(qgcd(i,q))gcd(i,q)

考虑使用 φI=id 改写 gcd(i,q):

nqi=1mφ(i)φ(qgcd(i,q))d|q,d|iφ(d)

将后两项合并,使用欧拉函数的积性:

nqi=1mφ(i)d|i,d|qφ(gcd(i,q)d)φ(qgcd(i,q))

nqi=1mφ(i)d|i,d|qφ(qd)

nqd|qφ(qd)i=1mdφ(id)

发现了 S(d,md) 所以可以递归了,记得边界和记忆化,可能的复杂度上界是 Θ(nm)

posted @   没学完四大礼包不改名  阅读(141)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示