[CQOI2007]余数求和
题目描述
给出正整数 nnn 和 kkk,请计算
G(n,k)=∑i=1nk mod iG(n, k) = \sum_{i = 1}^n k \bmod iG(n,k)=i=1∑nkmodi
其中 k mod ik\bmod ikmodi 表示 kkk 除以 iii 的余数。
输入格式
输入只有一行两个整数,分别表示 nnn 和 kkk。
输出格式
输出一行一个整数表示答案。
样例 #1
样例输入 #1
10 5
样例输出 #1
29
提示
样例 1 解释
G(10,5)=0+1+2+1+0+5+5+5+5+5=29G(10, 5)=0+1+2+1+0+5+5+5+5+5=29G(10,5)=0+1+2+1+0+5+5+5+5+5=29。
数据规模与约定
- 对于 30%30\%30% 的数据,保证 n,k≤103n , k \leq 10^3n,k≤103。
- 对于 60%60\%60% 的数据,保证 n,k≤106n, k \leq 10^6n,k≤106。
- 对于 100%100\%100% 的数据,保证 1≤n,k≤1091 \leq n, k \leq 10^91≤n,k≤109。
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
const int INF = 1e9 + 10;
const int N = 1e6;
LL n,k;
int main(){
cin >> n >> k;
LL ans = n * k;
for(int l = 1,r;l <= n;l = r + 1)
{
if(k/l != 0)
r = min(k/(k/l),n);
else
r = n;
ans -= (k / l) * (l + r) * (r - l + 1)/2;
}
cout << ans << endl;
system("pause");
return 0;
}