在对于求解∑i=1n⌊ni⌋\sum_{i=1}^{n} \lfloor\frac{n}{i}\rfloor∑i=1n⌊in⌋的时候,一般暴力跑的话需要O(n)O(n)O(n)的复杂度。
但是很神奇的事情是有一段的⌊ni⌋\lfloor\frac{n}{i}\rfloor⌊in⌋是相等的,这样对于每一段我们只
需要计算一次即可。
因此我们的代码可以这样写
for(int l=1,r;l<=n;l=r+1)
{
r=n/(n/l);
ans+=(r-l+1)*(n/l);
}