【学习笔记】整除分块

问题:

给出 \(n,k\),快速求出:

\[\Large{\sum_{i = 1}^{n} k \mod i} \]

对于\(20\%\)的数据,\(n \leq 10^{6} , 1 \leq k \leq 10^9\)
对于\(100\%\)的数据,\(n \leq 10^{12} , 1 \leq k \leq 10^9\)

方法一:

直接\(O(n)\)暴力求解,期望得分20分。

方法二:

把式子化简:

\[\Large\begin{aligned}\sum_{i = 1}^{n} k \mod i & = \sum_{i = 1}^{n} k - \left\lfloor\dfrac{k}{i}\right\rfloor\ i \\ & = \sum_{i = 1}^{n} k - \sum_{i = 1}^{n}\left\lfloor\dfrac{k}{i}\right\rfloor\ i \\ & = nk - \sum_{i = 1}^{n}\left\lfloor\dfrac{k}{i}\right\rfloor\ i \end{aligned} \]

假设 \(n = k = 5\)。那么\(\left\lfloor\dfrac{k}{i}\right\rfloor\) 分别是:

显然对于整数\(d\),满足\(\left\lfloor\dfrac{k}{i}\right\rfloor=d\)\(i\)必然是一段连续的区间\([l,r]\)。那么且该区间的贡献为\(d\sum_{i=l}^ri=d\cdot\frac{(r-l+1)(l+r)}{2}\)

这样就可以\(O(\sqrt{n})\)求解了,期望得分100分

posted @ 2019-12-26 17:36  Jayun  阅读(178)  评论(0编辑  收藏  举报