题目描述
输入格式
输入仅一行,包含两个整数 n,k。
输出格式
输出仅一行,即 j(n,k)。
数据范围
1≤n,k≤109
输入样例:
5 3
输出样例:
7
现在每一段的上界和下界都求出来了,只需要来一个等差数列求和就行啦,下面请看代码
#include<iostream>
using namespace std;
typedef long long LL;
int main(){
LL n,k,ans = 0;
cin>>n>>k;
ans = n * k;;
for(LL l = 1,r;l <= n;l = r+1){
if(k / l == 0) break;
r = min(k/(k/l),n);
ans -= (k/l) * (l + r) * (r-l+1) / 2;
}
cout<<ans<<endl;
return 0;
}