本文主要是介绍[CQOI2007]余数求和 [整除分块],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
传送门
考虑整除分块 , 对于一个答案固定的区间 l , r
l为左区间 设值为x=n/l
那么这个区间的贡献就是
#include<bits/stdc++.h>
#define LL long long
using namespace std;
int n,k; LL ans;
int main(){scanf("%d%d",&n,&k);ans = (LL)n * k;for(int l=1,r;l<=n;l=r+1){if(k/l==0) r=n;else r = min(k/(k/l),n);ans -= (LL)(r-l+1) * (k/l) * (l+r)/ 2;}printf("%lld",ans); return 0;
}
这篇关于[CQOI2007]余数求和 [整除分块]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!