$$\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 輸出...