分块求解即可1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using namespace std;
LL n,k,ans=0;
int main()
{
scanf("%lld%lld",&n,&k);
LL sz=sqrt(k);
for(LL i=1;k/i>sz;i++) ans-=i*(k/i);
for(LL i=sz;i>=1;i--)
{
LL L=k/(i+1)+1,R=min(n,k/i);
ans-=(L+R)*(R-L+1)/2*i;
}
printf("%lld",ans+n*k);
return 0;
}