整除分塊學習筆記

2022-05-11 13:16:04 字數 581 閱讀 9963

其實一直沒有把整除分塊看成乙個演算法,只看成乙個思維。然後發現我不會思維了,於是來補一下學習筆記。

看一道例題:uva11526

就是求\(\sum\limits_^⌋}\)

我們發現很多值都是一樣的,所以可以快速計算掉。

具體的,我們發現\(i\)到\(⌊\frac⌋}⌋\)內所有數是一樣的。

那麼就可以\(o(\sqrt n)\)計算了。

但是出題人通常不會讓你這麼好過。

比如\(\sum\limits_^⌋⌊\frac⌋}\)

那麼我們要這兩個在乙個區間內都相同,所以兩個要取\(\max\),複雜度是\(o(\max(\sqrt n,\sqrt m))\)

再比如\(\sum\limits_^⌋}\)

那麼我們對於同樣的值,我們要知道的是\(μ(i)\)在這一段區間內的值。

所以尤拉篩篩出來以後字首和即可。這種東西不可能一次詢問因為尤拉篩都\(o(n)\)了,一定是多次詢問。複雜度\(o(n+q\sqrt n)\)

這個東西在莫反裡面特別有用。

幾道例題:

[cqoi2007]餘數求和

cf1485c

題解

整除分塊 學習筆記

hgoi20181027模擬題 給定n,m,快速求出 fht n,m 1e9 7 的值。對於100 的資料 n,m 1,000,000,000 然後為了這個問題我們去找了整除分塊的演算法 對於g n,k 化簡 顯然 a b a a b b 在c 中floor a b a b 所以我們打個表來看看k ...

整除分塊學習筆記

假如我們要對這樣的式子進行求和 sum limits f i 如果 f i 的取值有限,只有 m 個,且對於所有的 f i x 在序列中都是連續的一段,那麼就可以進行值域分段求和。找出每個取值 x 在原序列中的第一次出現的位置 l x 和最後一次出現的位置 r x 可以在 o m 的時間內算出答案 ...

整除分塊 學習筆記

板子題 uva11526 題目大意 給定乙個 n 求 sum limits lfloor frac rfloor 其中 n 為 32 位無符號整數。顯然如果暴力求解肯定是不可行的,顯然會 tle,所以我們需要找一種複雜度更優的演算法。我們可以先令 n 10 觀察一下函式 operatorname x...