整除分块
问题
- 求 ∑ i = 1 n ⌊ n i ⌋ \sum_{i=1}^n\lfloor\frac{n}{i}\rfloor ∑i=1n⌊in⌋
- 显然可以 O ( n ) O(n) O(n) 暴力求解,但大多数情况下题目数据范围并不支持这样做
单调性
- 显然 ⌊ n i ⌋ \lfloor\frac{n}{i}\rfloor ⌊in⌋ 的取值只能是整数
- 容易发现随着 i i i 的增大, ⌊ n i ⌋ \lfloor\frac{n}{i}\rfloor ⌊in⌋ 的值越来越小
分块
- 我们可以先随便取一个 n n n 举例
- 假设取 n = 8 n=8 n=8
i i i | 1 1 1 | 2 2 2 | 3 3 3 | 4 4 4 | 5 5 5 | 6 6 6 | 7 7 7 | 8 8 8 |
---|---|---|---|---|---|---|---|---|
⌊ n i ⌋ \lfloor\frac{n}{i}\rfloor ⌊in⌋ | 8 8 8 | 4 4 4 | 2 2 2 | 2 2 2 | 1 1 1 | 1 1 1 | 1 1 1 | 1 1 1 |
- 可以发现相同的取值都是连续的,所以我们可以分段进行求解
分块数量
- 当 i ≤ n i\leq\sqrt{n} i≤n 时, i i i 是 1 1 1 到 n \sqrt{n} n 之间的整数,所以 ⌊ n i ⌋ \lfloor\frac{n}{i}\rfloor ⌊in⌋ 最多只有 n \sqrt{n} n 个取值
- 当 i ≥ n i\geq\sqrt{n} i≥n