[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]余数求和-整除分块的主要内容,如果未能解决你的问题,请参考以下文章

[Luogu 2261] CQOI2007 余数求和

luogu2261 [CQOI2007]余数求和

P2261 [CQOI2007]余数求和

[CQOI2007]余数求和

Luogu P2261 [CQOI2007]余数求和

P2261 [CQOI2007]余数求和