整除分块学习笔记
整除分块学习笔记
前言
最近在学习 莫比乌斯反演 ,好像要用到一个小小的知识点: 整除分块
所以为了让大家都能更好地学习莫比乌斯反演,我来水一篇博客
那么正片开始。
整除分块
现在要求一下式子
f
(
n
)
=
∑
i
=
1
n
⌊
n
i
⌋
f(n) = \sum_{i = 1}^n ⌊\frac{n}{i}⌋
f(n)=i=1∑n⌊in⌋
很明显能
O
(
n
)
O(n)
O(n) 做
但是有的时候因为多组数据,可能 O ( n ) O(n) O(n) 并不是正确的时间复杂度。那么这个时候就要用到 O ( n ) O(\sqrt n) O(n) 的 整除分块 了!
对于每一个
⌊
n
i
⌋
⌊\frac{n}{i}⌋
⌊in⌋ 我们可以通过 打表 理性证明可以发现:有一些
⌊
n
i
⌋
⌊\frac{n}{i}⌋
⌊in⌋ 的值都是一样的并且都是连在一起的。
设: d = ⌊ n i ⌋ d = ⌊\frac{n}{i}⌋ d=⌊in⌋ 然后每一块的左端点就是 ⌊ n d + 1 ⌋ + 1 ⌊\frac{n}{d+1}⌋ +1 ⌊d+1n⌋+1 ,右端点是 ⌊ n d ⌋ ⌊\frac{n}{d}⌋ ⌊dn⌋
code
int solve(int n){
int ans=0;
for(int l=1,r;l<=n;l=r+1){
r=n/(n/l);//计算出与l相同值的区间的右端点
ans+=(r-l+1)*f(n/l);
}
}
后记
感觉杜教筛好恶心啊!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端