【数论】整数分块及详细证明

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}]\)

posted @ 2018-12-27 11:07  ThinkofBlank  阅读(1346)  评论(4编辑  收藏  举报