整数分块学习笔记
整数分块学习笔记
——by sunzz3183
引入
求
正常求法:
直接枚举每个 ,时间复杂度为 。
可是,如果 呢?
所以,我们要用到分块的思想:整数分块
整数分块
显然
我们会浪费很多的时间。
那么,有多少段相等呢?
我们来看一张图
显然,存在一个 使得
并让
让
而显然 是由 得到, 是由 得到。
所以,我们去枚举 ,并让 等于上面的东西。
而下一段区间的 为 。
每一段的值为
时间复杂度 。
代码
int division_block(int n){
int sum=0;
for(int l=1,r;l<=n;l=r+1)
r=n/(n/l),sum+=n/l*(r-l+1);
return sum;
}
本文作者:sunzz3183
本文链接:https://www.cnblogs.com/sunzz3183/p/17190497.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步