关于如何推整除分块已知左端点时的右端点
具体操作
(设 \(f(x)\) 为下标取 \(x\) 时根据公式算出来的值,与特殊值 \(n\) 相关)
- 设 \(l\) 到 \(l+k\) 的 \(f(x)\) 一样,并设 \(f(l)=f(l+k)=x\)。
- 则 \(n=\) 一个函数 \(=\) 另一个函数
- 移项得 \(k=\) 另一个表达式 \(\le\) 上界 \(=\) 用 \(n,l\) 表达的式子。
- \(r=l+k=l+\) 那个表达式 \(=\) 化简的式子。
例子
\(f(x)=\lfloor\frac{n}{x}\rfloor\)
最基础的整除分块。
按步骤一步一步来:
- 设 \(\lfloor\frac{n}{l}\rfloor=\lfloor\frac{n}{l+k}\rfloor=x\),此时 \(n=x \times l + n%l\),设 \(n%l=p,n%(l+k)=q\)。
- 则 \(n=x\times l+p=x\times(l+k)+q\)。
- 移项得 \(k=\lfloor\frac{p-q}{x}\rfloor\le\lfloor\frac{p}{x}\rfloor=\lfloor\frac{n\%l}{\lfloor\frac{n}{l}\rfloor}\rfloor\)。
- \(r=l+k=l+\lfloor\frac{n\%l}{\lfloor\frac{n}{l}\rfloor}\rfloor=\lfloor\frac{n\%l+\lfloor\frac{n}{l}\rfloor\times l}{\lfloor\frac{n}{l}\rfloor}\rfloor=\lfloor\frac{n}{\lfloor\frac{n}{l}\rfloor}\rfloor\)。
\(f(x)=\lfloor\sqrt{\lfloor\frac{n}{x}\rfloor}\rfloor\)
今天推到的,也正是因为这个我才写这篇博客。(虽然说时间复杂度好似并没有优化……(有谁能帮我分析一下时间复杂度优化没有吗?))
- 设 \(\lfloor\sqrt{\lfloor\frac{n}{l}\rfloor}\rfloor=\lfloor\sqrt{\lfloor\frac{n}{l+k}\rfloor}\rfloor=x\),此时 \(n=(x^2+p_1)\times l + p_2\),\(x=\lfloor\sqrt{\lfloor\frac{n-p_2}{l}\rfloor-p_1}\rfloor\)其中 \(p_1=\frac{\frac{n}{l}}{{\lfloor\sqrt{\frac{n}{l}}\rfloor}^2},p_2=n\%l\)。
- 则 \(n=(x^2+p_1)\times l + p_2+p=(x^2+q_1)\times (l+k) + q_2\)。
- 移项得 \(k=\lfloor\frac{(p_1-q_1)\times l+(p_2-q_2)}{x^2+q_1}\rfloor\le\lfloor\frac{p_1\times l+p_2}{x}\rfloor=\lfloor\frac{(\lfloor\frac{n}{l}\rfloor-\lfloor\sqrt{\lfloor\frac{n}{l}\rfloor}\rfloor^2)\times l+n\%l}{\lfloor\sqrt{\lfloor\frac{n}{l}\rfloor}\rfloor^2}\rfloor\)。
- \(r=l+k=l+\lfloor\frac{(\lfloor\frac{n}{l}\rfloor-\lfloor\sqrt{\lfloor\frac{n}{l}\rfloor}\rfloor^2)\times l+n\%l}{\lfloor\sqrt{\lfloor\frac{n}{l}\rfloor}\rfloor^2}\rfloor=\lfloor\frac{\lfloor\frac{n}{l}\rfloor\times l+n\%l}{\lfloor\sqrt{\lfloor\frac{n}{l}\rfloor}\rfloor^2}\rfloor=\lfloor\frac{n}{\lfloor\sqrt{\lfloor\frac{n}{l}\rfloor}\rfloor^2}\rfloor\)。

浙公网安备 33010602011771号