码迷,mamicode.com
首页 > 其他好文 > 详细

[CQOI2007]余数求和-整除分块

时间:2020-04-07 09:19:29      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:span   class   return   str   tps   name   mat   href   整数   

题目

题目
题目大意:

给出正整数\(n,k\),求\(\Sigma_{i=1}^{n}{k \bmod i}\)

代码

乍一看只能暴力,其实稍微修改下就变成了数论分块。
\(\Sigma_{i=1}^{n}{k \bmod i}=\Sigma_{i=1}^{n}{\lfloor{\frac{k}{i}}\rfloor} \times 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]余数求和-整除分块

标签:span   class   return   str   tps   name   mat   href   整数   

原文地址:https://www.cnblogs.com/wyc06/p/12651299.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!