题解
\[ans=\sum_{i=1}^nk\ mod\ i=\sum_{i=1}^{n}k-\lfloor k/i\rfloor*i=n*k-\sum_{i=1}^n\lfloor k/i\rfloor *i
\]
其中 \(\sum_{i=1}^n\lfloor k/i\rfloor *i\) 可以用整除分块在 \(O(\sqrt{k})\) 的时间复杂度内求出来。
代码
int n,k;
LL ans;
int main(){
scanf("%d%d",&n,&k);
ans=1ll*n*k;
for(int l=1,r;l<=min(n,k);l=r+1){
r=min(k/(k/l),n);
ans-=1ll*(l+r)*(r-l+1)/2*(k/l);
}
printf("%lld\n",ans);
return 0;
}