在对于求解
∑
i
=
1
n
⌊
n
i
⌋
\sum_{i=1}^{n} \lfloor\frac{n}{i}\rfloor
∑i=1n⌊in⌋的时候,一般暴力跑的话需要
O
(
n
)
O(n)
O(n)的复杂度。
但是很神奇的事情是有一段的
⌊
n
i
⌋
\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);
}