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