Description
给出正整数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
Input
输入仅一行,包含两个整数n, k。
1<=n ,k<=10^9
Output
输出仅一行,即j(n, k)。
Sample Input
5 3
Sample Output
7
HINT
Source
把$a$%$b$表示成$a - \lfloor\frac{a}{b}\rfloor \cdot b$的形式
然后整除分块搞一波就行了
代码:
#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
ll k,n,ans;
int main()
{
cin>>n>>k;
if(n>k)
{
ans=(n-k)*k;
n=k;
}
for(ll r,l=;l<=n;l=r+)
{
r=k/(k/l);
if(r>n) r=n;
ans+=(r-l+)*k-(r-l+)*(l+r)/*(k/l);
}
cout<<ans;
return ;
}