「学习笔记」整除(数论)分块
数论分块
对于一个包含 \(\left \lfloor \dfrac{n}{i} \right\rfloor\) 的求和式子,如:
会出现许多 \(\left \lfloor \dfrac{n}{i} \right\rfloor = \left \lfloor \dfrac{n}{j} \right\rfloor = x (i \neq j)\) 的情况。
我们要对于每一个 \(x\) 找到一个最大的 \(j\) 使得\(\left \lfloor \dfrac{n}{i} \right\rfloor = \left \lfloor \dfrac{n}{j} \right\rfloor = x\)。
这个 \(j\) 就等于 \(\left \lfloor \dfrac{n}{\left \lfloor \dfrac{n}{i} \right\rfloor} \right\rfloor\)。
证明
对于 \(\left \lfloor \dfrac{n}{i} \right\rfloor = \left \lfloor \dfrac{n}{j} \right\rfloor (i < j)\) 有:
\(\begin{cases}\left \lfloor\dfrac{n}{i}\right\rfloor\leq \dfrac{n}{j} = \left \lfloor \dfrac{n}{j} \right\rfloor + r (0\leq r < 1) \\ \dfrac{n}{j + 1} < \left \lfloor \dfrac{n}{i} \right\rfloor\end{cases}\)
\(\left \lfloor\dfrac{n}{i}\right\rfloor\leq \dfrac{n}{j} \Rightarrow j \leq \dfrac{n}{\left \lfloor \dfrac{n}{i} \right\rfloor}\)
\(\dfrac{n}{j + 1} < \left \lfloor \dfrac{n}{i} \right\rfloor \Rightarrow \dfrac{n}{\left \lfloor \dfrac{n}{i} \right\rfloor} < j + 1\)
综上所述:\(j \leq \dfrac{n}{\left \lfloor \dfrac{n}{i} \right \rfloor} < j + 1\)
又 \(\because j \in \mathbb N_{+} \ \therefore j = \left \lfloor \dfrac{n}{\left \lfloor \dfrac{n}{i} \right\rfloor} \right\rfloor\)
复杂度分析
\(\forall n \in \mathbb N_{+}, \left | \left\{ \left\lfloor\dfrac{n}{d} \right\rfloor\mid d \in \mathbb N_{+},d \leq n \right\}\right| \leq 2\sqrt n\)
其中 \(|V|\) 表示 \(V\) 这个集合的元素个数。
证明:
对于 \(d \leq \sqrt n\) 的部分 \(\left\lfloor\dfrac{n}{d} \right\rfloor\) 最多有 \(\sqrt n\) 个数。
对于 \(d > \sqrt n\) 的部分 \(\left\lfloor\dfrac{n}{d} \right\rfloor\) 最多有 \(\sqrt n\) 种不同的取值。
证毕。
所以复杂度为 \(O(\sqrt n)\)。
小拓展
对于下式
上文中的 \(j\) 应该等于 \(\min(\left \lfloor \dfrac{n}{\left \lfloor \dfrac{n}{i} \right\rfloor} \right\rfloor, \left \lfloor \dfrac{m}{\left \lfloor \dfrac{m}{i} \right\rfloor} \right\rfloor)\)。