【学习笔记】整除分块
问题:
给出 \(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分