數論 整除分塊

2022-07-19 23:39:27 字數 1044 閱讀 7516

$$\sum_^n \lfloor \frac \rfloor$$

如果我們暴力求解,複雜度是 $o(n)$ 的,那程式幾天也跑不完。

思考一下,其實我們的瓶頸,就是出於 $i$ 太多了。

那列舉什麼量,才能讓列舉的數量變少?

我們把 $f(x)=\frac}$,$y=\lfloor f(x) \rfloor$ 的圖象畫了出來。

明顯地看到,在 $x$ 比較大的時候,$\frac}$ 十分靠近 $x$ 軸。

這麼說明,隨著 $x$ 越來越大,相同的 $y$ 的值也會越來越多。

像 $n=10^$ 的時候,$\frac}+1}$ 到 $\frac}}$ 下取整的值都是 1。

按照剛剛的列舉方法,相當於你有約一半的列舉量都浪費於答案為 1 的情況了。

那……我們列舉答案

好辦法!

乙個數字,最多有多少個因數?

最理想的狀態下,這個數滿足:$\forall i \in [1,\sqrt], \ i \mid n$。

為什麼這個數是最理想的,因為如果 $i$ 大於 $\sqrt$,且 $i \mid n$,則 $\frac$ 肯定在 $[1, \sqrt]$ 範圍內,必出現過。

所以這個數就是因數盡可能多的數。

同時有乙個結論,若 $i \mid n$,則 $\frac \mid n$。

所以,$n$ 的因數個數最多不超過 $2 \times \sqrt$,取整後的不同答案也不會超過 $2 \times \sqrt$。

因此,不同答案的個數不超過 $2 \times \sqrt$。

而觀察資料範圍,$2 \times \sqrt$ 在可以接受的範圍內。

如果能夠設計出一種剛好能列舉所有因數的演算法,這道題就可以被解決。

現在來推導一下:

很明顯,這個演算法將 $\frac$ 相同的情況整合到一塊共同處理,效率提高不少。

整除分塊(數論分塊)

乙個有 趣的問題 求 sum n lfloor frac ni rfloor n leq 10 顯然不能直接做廢話 經過一番冷靜推理暴力打表 我們發現以下性質 1.large lfloor frac ni rfloor 最多只有 2 sqrt 種取值 證明 對於 i le sqrt,只有 sqrt ...

數論分塊與整除相

引理一 forall a,b,c in mathbb,left lfloor frac right rfloor left lfloor frac right rfloor right rfloor 略證 begin frac left lfloor frac right rfloor r 0 le...

牛客NC13221 數碼 整除分塊(數論分塊)

牛客nc13221 數碼 整除分塊 數論分塊 鏈結 題目描述 給定兩個整數 l 和 r 對於所有滿足1 l x r 10 9 的 x 把 x 的所有約數全部寫下來。對於每個寫下來的數,只保留最高位的那個數碼。求1 9每個數碼出現的次數。輸入描述 一行,兩個整數 l 和 r 1 l r 10 9 輸出...