整除分块(非得五个字才能发,括号里都是凑字数的)

整除分块用于解决形如
∑ i = 1 n ⌊ n / i ⌋ \sum_{i=1}^{n} \lfloor n/i \rfloor ∑i=1n​⌊n/i⌋
的问题。

暴力解决的话复杂度为 O ( N ) O(N) O(N),整出分块后复杂度可以降低到 O ( N ) O(\sqrt N) O(N ​)

暴力打表可以看到的是,其中有一些连续的区间的 ⌊ n / i ⌋ \lfloor n/i \rfloor ⌊n/i⌋的值是相同的,呈现一个块状的分布,因此如果找出这些块并且按照块来计算的话,复杂度可以得到下降。

[ x , ⌊ n / ⌊ n / x ⌋ ⌋ ] [x, \lfloor n / \lfloor n / x \rfloor\rfloor] [x,⌊n/⌊n/x⌋⌋]这个区间内的 ⌊ n / i ⌋ \lfloor n / i\rfloor ⌊n/i⌋的值是相同的, i i i是区间内任意一个整数。

证明:

⌊ n / i ⌋ = k \lfloor n/i\rfloor=k ⌊n/i⌋=k等同于 ① k × i + p = n , 1 ≤ p < i ①k\times i+p=n,1\leq p <i ①k×i+p=n,1≤p<i,若 ⌊ n / ( i + d ) ⌋ = k \lfloor n/(i+d)\rfloor=k ⌊n/(i+d)⌋=k,就有 ② k × ( i + d ) + p ′ = n ②k \times (i+d) + p'=n ②k×(i+d)+p′=n, ② − ① ②-① ②−①变形得 p ′ = p − k × d p'=p-k\times d p′=p−k×d,其中 ③ d ③d ③d取最大值为 ⌊ p / k ⌋ \lfloor p/k\rfloor ⌊p/k⌋
就有 i ′ = i + d m a x = i + ⌊ p / k ⌋ i'=i+d_{max}=i+\lfloor p/k \rfloor i′=i+dmax​=i+⌊p/k⌋,其中 p = n % i = n − ⌊ n / i ⌋ × i p=n\% i=n-\lfloor n/i \rfloor \times i p=n%i=n−⌊n/i⌋×i, k = ⌊ n / i ⌋ = ⌊ n / ( i + d ) ⌋ k=\lfloor n/i \rfloor = \lfloor n/(i+d) \rfloor k=⌊n/i⌋=⌊n/(i+d)⌋,带入得如下:

= i + ⌊ ( n − ⌊ n / i ⌋ × i ) ⌋ ⌊ n / i ⌋ =i+\frac{\lfloor (n-\lfloor n/i \rfloor \times i) \rfloor}{\lfloor n/i \rfloor} =i+⌊n/i⌋⌊(n−⌊n/i⌋×i)⌋​

= ⌊ i + ⌊ n − ⌊ n / i ⌋ × i ⌊ n / i ⌋ ⌋ ⌋ =\lfloor i+\lfloor \frac{n-\lfloor n/i \rfloor \times i}{\lfloor n/i \rfloor} \rfloor \rfloor =⌊i+⌊⌊n/i⌋n−⌊n/i⌋×i​⌋⌋

= ⌊ i × ⌊ n / i ⌋ + n − ⌊ n / i ⌋ × i ⌊ n / i ⌋ ⌋ =\lfloor \frac{i\times \lfloor n/i \rfloor + n - \lfloor n/i \rfloor \times i}{\lfloor n/i \rfloor} \rfloor =⌊⌊n/i⌋i×⌊n/i⌋+n−⌊n/i⌋×i​⌋

= ⌊ n ⌊ n / i ⌋ ⌋ =\lfloor \frac{n}{\lfloor n/i \rfloor} \rfloor =⌊⌊n/i⌋n​⌋

即得到了最大的和它相等的值就是下面这个

⌊ n ⌊ n / i ⌋ ⌋ \lfloor \frac{n}{\lfloor n/i \rfloor} \rfloor ⌊⌊n/i⌋n​⌋

补充:
③证明

p ′ p' p′是余数,所以 p ′ ≥ 0 p'\geq 0 p′≥0,若 d m a x = y > ⌊ p k ⌋ d_{max} =y>\lfloor \frac{p}{k} \rfloor dmax​=y>⌊kp​⌋,则 p ′ = p − k × d m a x < 0 p' = p-k \times d_{max} <0 p′=p−k×dmax​<0,与 p ′ ≥ 0 p' \geq0 p′≥0矛盾,因此 d m a x d_{max} dmax​最大值不会大于 ⌊ p k ⌋ \lfloor \frac{p}{k} \rfloor ⌊kp​⌋,而d= ⌊ p k ⌋ \lfloor \frac{p}{k} \rfloor ⌊kp​⌋时满足条件,因此 ⌊ p k ⌋ \lfloor \frac{p}{k} \rfloor ⌊kp​⌋是最大值。

posted @ 2022-08-03 19:07  correct  阅读(62)  评论(0)    收藏  举报