花开的时候我们还在没等到花儿凋零

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

Correct·2022-08-03 19:07·19 次阅读

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

整除分块用于解决形如
∑ i = 1 n ⌊ n / i ⌋ \sum_{i=1}^{n} \lfloor n/i \rfloor i=1nn/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,1p<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=pk×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=nn/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(nn/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/inn/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/ii×n/i+nn/i×i

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

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

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

补充:
③证明

p ′ p' p是余数,所以 p ′ ≥ 0 p'\geq 0 p0,若 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=pk×dmax<0,与 p ′ ≥ 0 p' \geq0 p0矛盾,因此 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 @   correct  阅读(19)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示
目录