整除分块
引入
这道题:UVA11526 H(n)
就相当于求这个柿子:\(\boxed{\sum\limits_{i=1}^{n}\left\lfloor\dfrac{n}{i}\right\rfloor}\)
我们有\(O(\sqrt n)\)的做法——整除分块
求的是\(\left\lfloor\dfrac{n}{i}\right\rfloor\)
因为是向下取整,所以有些值是一样的
比如\(n=5\)时,\(\left\lfloor\dfrac{n}{3}\right\rfloor\)和\(\left\lfloor\dfrac{n}{4}\right\rfloor\)和\(\left\lfloor\dfrac{n}{5}\right\rfloor\)的结果一样
不难发现,这些值是像块状一样分布的\(qwq\)
每一个值相同的块的\(i\)的最大值一定是\(\left\lfloor\dfrac{n}{\left\lfloor\dfrac{n}{i}\right\rfloor}\right\rfloor\)
可以写出以下代码qwq(附解释):
那么时间复杂度呢?
解:\(\left\lfloor\dfrac{n}{i}\right\rfloor\)的取值最多只有\(2\sqrt n\)种,理由如下
当\(1\leqslant i \leqslant \sqrt n\)时,\(i\)的取值有\(\sqrt n\)种,则上述式子最多只有\(\sqrt n\)种取值
当\(\sqrt n \leqslant i \leqslant n\)时,上述式子取值最多也有\(\sqrt n\)种
总共最多有\(2\sqrt n\)种取值
由于代码枚举了\(2\sqrt n\)次取值,复杂度便为\(\sqrt n\)
比暴力好了许多\(qwq\)