整数分块【OI Pharos 6.1.3】
1 概念
整数分块用来解决这样的问题:
∑ i = 1 n ⌊ n i ⌋ \sum_{i = 1}^{n} \lfloor\frac{n}{i}\rfloor i=1∑n⌊in⌋
一般做法是 O ( n ) O(n) O(n) 遍历一遍
但是我们发现有很多连着的值相同
可以观察下表20内的值
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 20 | 10 | 6 | 5 | 4 | 3 | 2 | 2 | 2 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
整数分块可以在 O ( n ) O(\sqrt{n}) O(n)的复杂度内解决这个问题
2 做法
考虑对于 ⌊ n i ⌋ \lfloor\frac{n}{i}\rfloor ⌊in⌋相同的区间,假设我们已知区间左端点 l l l
右端点可以表示为 r = m a x ( i ) ( i ∈