【数论】整数分块及详细证明
update:添加了数学公式markdown
洛谷博客地址:https://www.luogu.com.cn/blog/KingofNight/post-shuo-lun-zheng-shuo-fen-kuai-ji-yang-xi-zheng-ming
一.复杂度证明
引理一:对于任意一个正整数\(x\),\([\frac{x}{d}](1\leq d\leq x)\)
的种类的数量在\(\sqrt{x}\)级
证明:将\(d\)分为小于等于\(\sqrt{x}\)与大于\(\sqrt{x}\)的两部分
1.当\(d\leq\sqrt{x}\)时:
假设每个\([\frac{x}{d}]\)都不一样,最多也就\(\sqrt{x}\)个值
2.当\(d>\sqrt{x}\)时:
\([\frac{x}{d}]<\sqrt{x}\)
∴\([\frac{x}{d}]\)的取值同样不超过\(\sqrt{x}\)个
∴个数在根号\(x\)级(不超过\(2*\sqrt{x}\))
即,整数分块的复杂度为\(O(\sqrt{x})\)
二.一堆引理及证明
引理二:对于所有使\([\frac{x}{i}]=C\)的\(i\),其集合一定是一段连续的整数区间
证明:假设不是连续区间,则一定存在一个\(l<t<r\),
使得\([\frac{x}{l}]=[\frac{x}{r}]\)且\([\frac{x}{l}]\neq[\frac{x}{t}]\)
∵\(t>l\)
∴\([\frac{x}{t}]<[\frac{x}{l}]\)
∵\(t<r\)
∴\([\frac{x}{t}]>[\frac{x}{r}]\)
∵\([\frac{x}{l}]=[\frac{x}{r}]\)
∴假设不成立
∴所有使\([\frac{x}{i}]=C\)的\(i\),其集合一定是一段连续的整数区间
引理三:对于所有使\([\frac{x}{i}]=C\)的\(i\),如果其集合为\([l,r]\),那么我们只需要知道\(l\),就可以求出\(C\)和\(r\)
证明一:
∵\([l,r]\)内所有的数都可以使\([\frac{x}{i}]=C\)(定义)
∴\(C=[\frac{x}{l}]\)
小引理:\(r=[\frac{x}{[\frac{x}{l}]}]\)
一.证明\([\frac{x}{A}]=C\)
令\(A=[\frac{x}{[\frac{x}{l}]}]=[\frac{x}{C}]\)
所以\(AC\)可以表示为:
\(AC=x-k(0<=k<A,C)\)
∴\(A=\frac{x-k}{C}\)
∴\(\frac{x}{A}=\frac{Cx}{x-k}\geq\frac{Cx}{x}=C\)
假设\(\frac{x}{A}\geq C+1\)
∴\(AC\leq x-A\)
∵\(AC=x-k\)
又∵\(k<A\)
∴假设不成立
∴\(\frac{x}{A}<C+1\)
综上所述:\(C\leq \frac{x}{A}<C+1\)
∴\([\frac{x}{A}]=C\)
二.证明\(A\)为最大的使\([\frac{x}{i}]=C\)成立的数
令\(AC=x-k(0\leq k<A,C)\)
假设\(A\)不是最大令\([\frac{x}{i}]=C\)成立的数,由引理二知:
\(A+1\)一定可以使\([\frac{x}{i}]=C\)
∴\((A+1)*C=x-g(0\leq g<A,C)\)
∴\(AC+C=x-g\)
又∵\(AC=x-k\)
∴\(C=k-g\)
∵\(0\leq k,g<C\)
∴假设不成立
∴命题得证
综上所述:\(A=[\frac{x}{C}]\)是最大的令\([\frac{x}{i}]=C\)成立的数
∴\(A\)满足r的所有性质
∴\(r=A\)即\(r=[\frac{x}{C}]=[\frac{x}{[\frac{x}{l}]}]\)
∴引理三得证
三.实现方法
由引理三知,我们只需要知道\(l\)就可以\(O(1)\)算出区间\([l,r]\)使得对于\(\forall i\in [l,r]\)都有\([\frac{x}{i}]=[\frac{x}{l}]\)且对于\(\forall i\notin [l,r]\)都有\([\frac{x}{i}]\neq[\frac{x}{l}]\)
而,如果我们要枚举区间\([L,R]\)的所有整数,那么第一个区间的\(l\)一定是\(L\)!
那么之后的区间呢?
不就是前一个区间的"\(r\)"加个一嘛!
∴我们就可以在\(\sqrt{x}\)枚举完整个区间了!
PS:一个区间的定义:具有一个范围[l,r],且满足对于\(\forall i\in [l,r]\)都有\([\frac{x}{i}]=[\frac{x}{l}]\)且对于\(\forall i\notin [l,r]\)都有\([\frac{x}{i}]\neq[\frac{x}{l}]\)