整除分块小记

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)) 的时间内解决类似上面这样的问题了。

以上是关于整除分块小记的主要内容,如果未能解决你的问题,请参考以下文章

[CQOI2007]余数求和-整除分块

数论分块之整除分块

整除分块

C. Everyone is a Winner!(整除分块)

整除分块

整除分块模板