[CQOI2007]余数求和-整除分块
Posted wyc06
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[CQOI2007]余数求和-整除分块相关的知识,希望对你有一定的参考价值。
题目
题目
题目大意:
给出正整数(n,k),求(Sigma_{i=1}^{n}{k mod i})
代码
乍一看只能暴力,其实稍微修改下就变成了数论分块。
(Sigma_{i=1}^{n}{k mod i}=Sigma_{i=1}^{n}{lfloor{frac{k}{i}}
floor} imes i)
然后就比一般的整除分块只是多了一个i,套板子就行了。
#include <iostream>
using namespace std;
typedef long long ll;
ll n,k,ans;
int main() {
cin>>n>>k;
ans=k*n;
ll r,len;
for(int l=1;l<=n;l=r+1) {
if(k/l==0) {
r=n;
continue;
}
r=min(n,k/(k/l)),len=r-l+1;
ans-=(l+r)*len/2*(k/l);
}
cout<<ans;
return 0;
}
以上是关于[CQOI2007]余数求和-整除分块的主要内容,如果未能解决你的问题,请参考以下文章