首页 > 技术文章 > 整除分块的向上向下取整写法

zjjws 2020-07-28 21:03 原文

首先向上取整有一个证明,这个我之前写过


推导

对于向上取整,求:

\[\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

简单的运用。

推荐阅读