整除分块学习笔记
模型
求
假设
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
---|---|---|---|---|---|---|---|---|---|---|
10 | 5 | 3 | 2 | 2 | 1 | 1 | 1 | 1 | 1 |
如果我们的
我们可以将相同的分为一块,这样可以发现块不会超过
证明:
我们设当前块的值为
当
当
综上,块的个数不超过
推导
我们需要找到每个块的左右端点,设我们已知这个块的左端点
设这个块的值为
那么
则
下一个块的
变形
设
则有
则
已知
为 的约数个数,求 。
题目来源:P1403 [AHOI2005] 约数研究
我们直接计算每个数的约数个数显然会超时,那么我们不妨枚举每个约数的个数。
显然的
那么问题就转换为了:求
整除分块即可。
已知
,求
考虑换元,设
还是一样的,则对
设
则
对于
则可以推出
所以
6666
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下