数学题。。n>k部分的直接可以计算(n-k)*k。。考虑1<=i<k,显然相同的k/i都是连续的,而且只有sqrt(n)个商,对于每一块之内余数是一个等差数列,分块计算即可。。
#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
ll n,k,a1,q,i,d,len,ans=0;
int main()
{
cin>>n>>k;
i=1;
if (n>=k) ans+=(n-k)*k,n=k-1;
while(i<=n)
{
d=k/i;len=k/d;if (len>=n) len=n;
a1=k-len*d;
ans+=(ll)(len-i+1)*a1+(ll)(len-i)*(len-i+1)*d/2;
i=len+1;
}
cout<<ans;
}