5814: 余数之和(整数分块)

Posted qq-1585047819

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5814: 余数之和(整数分块)相关的知识,希望对你有一定的参考价值。

描述

 

给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值

其中k mod i表示k除以i的余数。

例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod 3 + 3 mod 4 + 3 mod 5=0+1+0+3+3=7

 

 

输入

 

输入仅一行,包含两个整数n, k。

1<=n ,k<=10^9

 

 

输出

 

输出仅一行,即j(n, k)。

 

样例输入

样例输出

 

 解题思路:    整数分块最后那个数为j=k/(k/i)       f(n,k)=Σ(k-i*k/i) (i=1~n);   等差求和

技术图片
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 ll n,k;
 5 ll cal()
 6     ll j,res=0;
 7     for(int i=1;i<=min(n,k);i=j+1)
 8         j=min(n,k/(k/i));
 9         res+=(i+j)*(k/i)*(j-i+1)/2;
10     
11     return res;
12 
13 int main()
14     ios::sync_with_stdio(false);
15     cin>>n>>k;
16     cout << n*k-cal() << endl;
17     return 0;
18 
View Code

 

以上是关于5814: 余数之和(整数分块)的主要内容,如果未能解决你的问题,请参考以下文章

bzoj 1257 : [CQOI2007]余数之和 (数学+分块)

AcWing - 199 - 余数之和 = 数论分块

bzoj 1257 [CQOI2007]余数之和——数论分块

[BZOJ1257][CQOI2007]余数之和sum 数学+分块

余数求和(整数分块)

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