整除分块小记
Posted smsylby
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了整除分块小记相关的知识,希望对你有一定的参考价值。
一个在反演里面经常用到的小技巧。
整除分块是用来解决一个整除的求和问题: (sumlimits_{i=1}^{n} lfloor frac{n}{i} floor)
如果直接暴力算,(O(n)) 的时间复杂度肯定接受不了。
但是观察得到,对于一些 (i),(lfloorfrac n i floor)的值是相同的。
例如 (n=10) 时:(为了方便表示,下面的 /
都表示向下取整的除法)
(10/1 = 10)
(10/2 = 5)
(10/3 = 3)
(10/4 = 10/5 = 2)
(10/6 = 10/7 = 10/8 = 10/9 = 10/10=1)
不妨把结果相同的 (i),都归为一个块,那么总块数不会超过 (2sqrt n) 个。
证明:
当 (i<=sqrt n) 时,有 (sqrt n) 种不同的块;
当 (i>sqrt n) 时,(lfloorfrac n i floor < sqrt n),也有 (sqrt n) 种不同的块。
证毕。
如果知道一个块的左端点是 (l),那么这个块的右端点是 (n/(n/l))。
证明略
然后就可以在 (O(sqrt n)) 的时间内解决类似上面这样的问题了。
以上是关于整除分块小记的主要内容,如果未能解决你的问题,请参考以下文章