整除分块

整除分块

整除分块是用来求这样的式子的:

\(\sum_{i=1}^{n}\lfloor\dfrac k i\rfloor\)

如果打出表会发现这个值是呈阶梯状下降的,然后他的取值最多有 \(2\sqrt n\) 种,所以只要能 \(O(1)\) 求出每个块的右边界,就可以将这个 \(O(n)\) 的式子优化到 \(O(\sqrt n)\)


\(O(1)\) 求右边界的方法:

设左端点为 \(l\)\(t=\lfloor\dfrac k l\rfloor\)

  1. \(t\ne0,r=\min(\lfloor\dfrac k t\rfloor,n)\)
  2. \(t=0,r=n\)

证明:

先证明 \(r=\lfloor\dfrac k t\rfloor\) 时,\(\lfloor\dfrac k {\lfloor\frac k t\rfloor}\rfloor\) 大于等于 \(t\)

\(t=\lfloor\dfrac k l\rfloor\leq\dfrac k l\)

\(\lfloor\dfrac k {\lfloor\frac k t\rfloor}\rfloor\geq\lfloor\dfrac k { \frac k t}\rfloor=t\)

\(\lfloor\dfrac k {\lfloor\frac k l\rfloor}\rfloor\geq t\)

再证明 \(r=\lfloor\dfrac k t\rfloor+1\) 时,\(\lfloor\dfrac k {\lfloor\frac k t\rfloor+1}\rfloor\) 小于\(t\),这样由 \(\lfloor\dfrac k i\rfloor\) 单调不升且存在 \(\lfloor\dfrac k i\rfloor=t\) 就可以得证 \(r=\lfloor\dfrac k t\rfloor\) 时是最大的满足条件的右端点。

\(\lfloor\dfrac k {\lfloor\frac k t\rfloor+1}\rfloor\leq\dfrac k {\lfloor\frac k t\rfloor+1}\)

只需证 \(\dfrac k {\lfloor\frac k t\rfloor+1}<t\)

把分母乘过去,\(k<t*{\lfloor\frac k t\rfloor+t}\)

\(k=x*t+r,0\leq r<t\)

\(x*t+r<t*x+t\)

\(r<t\)

得证。


好像可以拓展到二维,但我还没看,先咕了

posted @ 2021-10-17 21:47  llmmkk  阅读(62)  评论(0编辑  收藏  举报