整除分块的向上向下取整写法
首先向上取整有一个证明,这个我之前写过。
推导
对于向上取整,求:
\[\sum_{i=1}^{n} \left \lceil \frac{n}{i} \right \rceil
\]
设:
\[\left \lceil \frac{n}{i} \right \rceil=m
\]
对于相同的 \(m\) ,满足:
\[i\times (m-1)< n\le i\times m
\]
\[\frac{n}{m}\le i<\frac{n}{m-1}
\]
因为 \(i\) 是整数
\[\frac{n}{m}\le i\le \frac{n-1}{m-1}
\]
所以对于当前找到的一个左端点 \(i\),求出对应的 \(m\),然后算出值 \(m\) 相同的区间的右端点就好了。
注意在向上取整的时候要特判 \(m=1\) 的情况,右边界为 \(n\),不然会出现 \(\frac{n}{0}\) 导致RE。
向下取整超级简单,更好推还不用特判,对于点 \(i\),右边界就等于:
\[\left\lfloor \frac{n}{\left\lfloor\frac{n}{i}\right\rfloor}\right\rfloor
\]
练习
[HAOI2011]Problem b
简单的运用。
$$\texttt{Dirty Deeds Done Dirt Cheap}$$