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