int main() { ll l,r; ll n,sum=0; scanf("%lld",&n); //左端点l,右端点r; for(l=1,r=0;l<n;l=r+1) { r=n/(n/l); sum+=(r-l+1)*(n/l); } printf("%lld\n",sum); }
数论分块
原文:https://www.cnblogs.com/aacm/p/15186507.html