首先向上取整有一個證明,這個我之前寫過。
推導
對於向上取整,求:
\[\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
簡單的運用。