整除分块
常搭配莫反食用。莫比乌斯反演笔记
求
, 。
第一步:
第二步:
然后问题就是怎么求
直接枚举肯定是不行的,但是
所以可以枚举
因为取值只有
怎么实现枚举取值?直接枚举又变成
我们可以用类似双指针的方法,初始让指针
(一定要搞清楚
怎么求
那么最大的
以上就是所有思路,但是在代码上还有要注意的地方。
首先注意 k / (k / l)
的结果可能会超过
然后注意在 k / l = 0
的时候一定要跳出循环,不然上面 k / (k / l)
直接除
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, k;
ll ans = 0;
int main() {
cin >> n >> k;
ans = n * k;
for (int l = 1, r = 0; l <= n; l = r + 1) {
if (k / l != 0)
r = min(k / (k / l), n);
else
break;
ans -= 1ll * (k / l) * (l + r) * (r - l + 1) / 2;
}
cout << ans << endl;
return 0;
}
整除分块一般用来处理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!