题解:
数论
首先把n>k的部分特判
k%1+k%2+...+k%n=nk-int(k/i)*i(1<=i<=k)
然后对于每一个k/i,一段一段求
容易发现只有sqrt(n)个
代码:
#include<bits/stdc++.h> using namespace std; long long n,k,ans1,ans2,t,r; int main() { scanf("%d%d",&n,&k); ans1=n*k; if (n>=k)n=k; for (int i=1;i<=n;i=r+1) { t=k/i;r=k/t; if (r>n)r=n; ans2+=t*(i+r)*(r-i+1)/2; } printf("%lld\n",ans1-ans2); return 0; }