数论筛法学习笔记
算法部分
杜教筛
要求 \(f\)积性,且能被表示为 \(f* h = g\),而 \(g\) 的前缀和与 \(h\) 的点值是好求的。
考虑展开狄利克雷卷积。
整理一下,获得
使用类似整除分块的方法,可以只需要求出\(\mathcal O(\sqrt n)\) 个点值,经过积分分析,时间复杂度为 \(\mathcal O(n^{\frac{3}{4}})\)。如果通过线性筛筛出较小的值,较大的值递归计算的话,时间复杂度可被优化至 \(\mathcal O(n^{\frac{2}{3}})\)。
PN筛
考虑构造积性函数 \(g(p)=f(p)[p\text{ is }prime]\),若 \(g\) 的块筛容易获得,则我们也可以获得 \(f\) 的块筛。
考虑函数 \(h\) 满足 \(f = g * h\),则由于狄利克雷卷积对积性函数构成一个群,\(h\) 同为积性函数,而由于 \(f(p) = g(p) + h(p)\) ,则 \(h(p)\) 处为 \(0\),且由于积性性质,若有 \(p | n,p^2\not|n,h(n) = 0\),所以有值的 \(h\) 并不多,我们将其称之为 \(PN\)(Powerful Number)。
显然,所有 \(PN\) 可被表示为 \(a^2b^3\),而通过积分分析,小于 \(n\) 的 \(PN\) 只会有 \(\mathcal O(\sqrt n)\) 个,通过 \(dfs\) 找出所有 \(PN\) 的复杂度相同。
进行一波与杜教筛类似的推导。
由于只有在 \(PN\) 处 \(h\) 有值,所以只要求得 \(g\) 的块筛就可以在 \(\mathcal O(\sqrt n)\) 的时间内求得 \(f\) 的块筛。实际应用中,瓶颈往往在求得 \(g\) 的块筛而不是 \(PN\) 筛。
Min25 筛
学了在写。
技巧
区间筛
对于能线性筛的积性函数 \(f\) ,要求筛出区间 \([l,r]\) 的值。
发现对于 \(b\) 以内的合数最小质因子一定小于 \(\sqrt b\) ,那么先筛出\([1,\sqrt r]\) 以内的质数表,再用埃式筛法用这些素数去筛出 \([l,r]\) 区间内的值即可,最小质因子可以在过程中记录。
先写这么多吧。
波特筛
分块打表。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App