P2261 [CQOI2007]余数求和
分析
求的式子为,我们首先需要知道的是,则式子就变成了。
然后,可以用整数分块做,这样时间复杂度就降到
中间有一些小的限制,我会在代码中写出来。
Ac_code
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int g(int x,int l)//边界为x,该块边界为l
{
return x/(x/l);
}
int main()
{
int n,k;cin>>n>>k;
LL ans = 0;
if(n>k)
{
ans += 1ll*(n-k)*k;
n = k;
}
ans += 1ll*n*k;
for(int l=1,r;l<=n;l=r+1)
{
r = min(g(k,l),n);
ans -= 1ll*(l+r)*(r-l+1)/2*(k/l);
}
cout<<ans<<'\n';
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步