整除分塊
先上板子:
for(int l=2,r;l<=k;l=r+1) { r=k/(k/l); }
復雜度:$\Theta\left ( \sqrt{n} \right )$
證明口胡:
蒟蒻到今天才明白為什么這么分
好現在開始證口胡
整除分塊的核心是在一段區間內$\left \lfloor n/i \right \rfloor$的值是相等的
有因為$\left \lfloor n/i \right \rfloor$只有$2\cdot \sqrt{n}$個取值,所以是$\Theta\left ( \sqrt{n} \right )$的.
考慮在確定了左端點后,如何確定右端點
先明確我們要選的區間應該滿足:$$\lfloor n/l \rfloor=\lfloor n/r \rfloor$$
$l$已經確定了,現在的任務是最大化$r$
$\left \lfloor n/l \right \rfloor$的意義可以看作$n$中可以被划分出多少個長度為$l$的區間
問題可以轉化為:求$n$可以被划分為多少個長度為$\left \lfloor n/l \right \rfloor$的區間
那么答案就顯然為:$$\left \lfloor n/{\left \lfloor n/l \right \rfloor} \right \rfloor$$
完結撒花接下來是關於$\left \lfloor n/i^{2} \right \rfloor$的整除分塊
仍然按上面的思路來
要選的區間應該滿足:$$\left \lfloor n/l^{2} \right \rfloor=\left \lfloor n/r^{2} \right \rfloor$$
仍然最大化$r^{2}$,問題轉化為
求$n$可以被划分為多少個長度為$\left \lfloor n/l^{2} \right \rfloor$的區間
答案為:$$\left \lfloor n/\left \lfloor n/l^{2} \right \rfloor \right \rfloor$$
但是要注意,此時求出的是$r^{2}$
所以應該開根,即為:$$\sqrt{\left \lfloor n/\left \lfloor n/l^{2} \right \rfloor \right \rfloor}$$
然后我打算口胡$n^{2}/i^{3}$的:
大概率會錯,打我的時候別打臉就行
要選的區間可能應該滿足:$$\left \lfloor n^{2}/l^{3} \right \rfloor=\left \lfloor n^{2}/r^{3} \right \rfloor$$
可能仍然最大化$r^{3}$,問題可能轉化為
求$n^{2}$可以被划分為多少個長度為$\left \lfloor n^{2}/l^{3} \right \rfloor$的區間
答案可能為:$$\sqrt[3]{\left \lfloor n^{2}/\left \lfloor n^{2}/l^{3} \right \rfloor \right \rfloor}$$
(好丑啊)