具体解释看这篇博客
例题见这的D1
板子
整除分块是快速求
∑
i
=
1
n
⌊
n
i
⌋
\sum_{i=1}^n \lfloor \frac{n}{i}\rfloor
∑i=1n⌊in⌋
因为整除的值是连续的,只需要算出左右区间就可以快速求和;
算法时间复杂度
O
(
n
)
O(\sqrt{n})
O(n
)
int ans=0;
for(int l=1,r;l<=n;l=r+1){
r=n/(n/l);
ans+=(r-l+1)*(n/l);
}
printf("%d\n",ans);