1. 程式人生 > >[知識點]莫比烏斯反演模型進階

[知識點]莫比烏斯反演模型進階

alt blog ima img 技術 bre png span 數組

哪來什麽進階QAQ,只不過是被虐得更慘了

總結了一下lc傳授的套路與模型

一般來講是求與gcd有關的。那麽可以反演得到模型:

令f(d)為1<=x<=n,1<=y<=m且gcd(x,y)=d的數對(x,y)的個數

然後可以枚舉d進行一波操作,然後再換個元,大概可以得到

技術分享圖片

通過預處理出g(x)和前綴和,分塊去計算答案,以達到單次詢問√n

至於這個處理g(x),我們通常用以下方法:

借鑒線性篩,分類操作

①x為質數時

②i與p互質時求i*p

③i%p==0時求i*p(此時break)

通常第三種情況我們需要使i*p=i1*py,此時i1

與p互質,這樣就可以轉化為情況二去解決問題了

那麽我們怎麽求得i1以及y呢?簡單粗暴可以暴力去除,最壞復雜度是O(logn)

我們還可以O(1)去求:

對於每一個數,記錄它的最小質因數P[i]、它的冪K[i]、還有G[i*p]=P[i*p]K[i*p]

由於篩的時候每個數都會被它的最小質因數篩掉,所以在break之前,p為i*p的最小質因數

情況二的時候,P[i*p]=p,K[i*p]=1,G[i*p]=p

情況三的時候,由於i*p已經記錄最小質因數p了,只需將K[i*p]=K[i]+1就好了,同時G[i*p]=G[i]*p

需要求情況三中的y和i1的時候,K數組裏就是y,可以O(1)求出 i1

=(i*p)/G[i*p] (撒花!!)

此類型題目:

[BZOJ 3529]數表

[BZOJ 3309]DZY Loves Math

[知識點]莫比烏斯反演模型進階