[知識點]莫比烏斯反演模型進階
阿新 • • 發佈:2017-12-08
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
[知識點]莫比烏斯反演模型進階