数论分块学习笔记
模板#
给定一个正整数 ,其中 ,考虑求
我们可以直接模拟,时间复杂度 。
但这样显然无法通过这个问题。
思想#
我们把 的情况列出来:
容易发现,对于一些不同的 ,有相同的 ,我们可不可以把这些相同的部分一并计算来降低时间复杂度呢?
显然是可以的。
我们把这些有相同 值的区间称为一个块,那么问题在于我们如何找到块长,或者说块的左右端点。
假设我们已知某个块的左端点 ,求解块的右端点 。
记有整数 ,表示这个块的数值。
显然有
即 ,那么我们可以发现,当 时, 的值最大且 。
那么有:
又因为有:
代入得:
Code#
long long H(int n) {
long long res = 0;
if(n == 0)
return 0;
int l = 1,r;
while(l <= n) {
r = n / (n / l);
res += 1ll * (r - l + 1) * (n / l);
l = r + 1;
}
return res;
}
性质#
最多只有 种取值。
证明:对于 ,最多有 种取值;而对于 ,有 ,所以也最多只有 种取值,所以最多也只有 种取值。
练习#
UVA11526 H(n)(模板题)
作者:白简
出处:https://www.cnblogs.com/baijian0212/p/zhengchufenkuai.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异