直接按取整相同的数分块就可以了,可以证明不会大于sqrt(n)块。
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
long long n,k,pos;
long long ans;
int main()
{
scanf("%lld%lld",&n,&k);
long long tmp=min(n,k-1);
for(int i=1;i<=tmp;i=pos+1)
{
pos=min(k/(k/i),tmp);
ans+=k*(pos-i+1)-(k/pos)*(pos+i)*(pos-i+1)/2;
}
if(n>k)
{
ans+=(n-k)*k;
}
printf("%lld",ans);
return 0;
}