1. 程式人生 > >莫比烏斯反演總結

莫比烏斯反演總結

枚舉 span 那種 學習 符號 class 如何 == 是我

莫比烏斯反演總結

最近學習了莫比烏斯反演,所以來總結一下

莫比烏斯函數

\(\mu(x)\)是莫比烏斯反演中常用的函數,ta表示的意思是將\(x\)分解成\(\prod_{i=1}^{k}{p_{i}^{t}}\),如果有至少一項的質數的指數\(t\)不為1,那麽\(\mu(x)=0\),否則\(\mu(x)=(-1)^k\)(k表示能分解的質數的個數)
特殊的,\(\mu(1)=1\)

莫比烏斯函數的性質

\(\mu\)是積性函數
\(\sum_{i=1}^{n}{\mu[i]}=[n==1]\)
\(\sum_{d|n}{\frac{\mu[d]}{d}}=\frac{\phi(n)}{n}\)

整除分塊

在反演中,經常會遇到\(\sum_{T=1}^{min(n,m)}{f(T)\frac{n}{T}\frac{m}{T}}\)
這時,我們發現很多的\(n/T,m/T\)都是相同的,所以可以通過除法分塊\(O(\sqrt{n})\)的做出來

for(int l = 1 , r ; l <= min(n,m) ; l = r + 1) {
    r = min(n / (n / l) , m / (m / l)) ;
//  這時當T=l~r時的n/T,m/T是相同的
    ans += (sum[r] - sum[l - 1]) * (n / l) * (m / l) ;
}

莫比烏斯反演

反演的本質就是用一個可以快速求出的或者比較好求得函數來計算一個與ta相關的不好求的函數
具體的,如果\(F(d)=\sum_{n|d}{f(n)}\)
那麽\(f(d)=\sum_{n|d}{\mu(\frac{d}{n})f(n)}\)
當然也還有\(F(d)=\sum_{d|n}{f(n)}\)
那麽\(f(d)=\sum_{d|n}{\mu(\frac{n}{d})f(n)}\)

莫比烏斯反演化簡式子常見套路

我們經常會遇見這樣的式子
\(\sum_{i=1}^{n}\sum_{j=1}^{m}{[gcd(i , j)==d]}\)
這樣我們設\(i=id,j=jd\)
式子就會變成這樣\(\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}[gcd(i,j)==1]\)

有時候我們會把式子化簡成這個樣子
\(\sum_{d=1}^{n}F(d)\sum_{d|T}{\mu(\frac{T}{d})\frac{n}{T}\frac{m}{T}}\)
然後可以發現這玩意兒可以化簡成這樣
\(\sum_{d=1}^{n}F(d)B(\frac{n}{d},\frac{m}{d})\)
這樣就可以除法分塊,然後裏面的\(B()\)也可以除法分塊,這樣單次詢問的時間是\(O(n)\)
但是我們可以將求和號交換
可以發現\(T=id\)
所以我們就先去枚舉\(T\)
\(\sum_{T=1}^{n}\frac{n}{T}\frac{m}{T}\sum_{d|T}{F(d)\mu(\frac{T}{d})}\)
然後我們就可以去篩後面的那部分函數,然後對函數搞一個前綴和,這樣又可以除法分塊了,單次詢問復雜度\(O(\sqrt(n))\)

有的時候我們可能會遇到一些特殊的情況,比如累乘
\(\prod_{d=1}^{n}f(d)^{\sum_{i=1}^{n/d}{\mu(i)\frac{n}{id}\frac{m}{id}}}\)
然後可以對指數整除分塊,然後對下面也是整除分塊,復雜度\(O(n)\)
然後我們考慮向上面的那種情況一樣交換符號,考慮如何把指數弄下來
其實這個東西就相當於這樣\(\prod{a}^{1+3+4+5}=\prod_{i=1}^{num}\prod{a^{t[i]}}\)
所以這個也是同理,把求和號弄到前面來變成累乘號得\(\prod_{T=1}^{n}\prod_{d|T}f(d)^{\mu(\frac{T}{d})\frac{n}{T}\frac{m}{T}}\)
然後我們就可以去考慮去篩這個\(\prod_{d|T}{f(d)^{\mu(\frac{T}{d})}}\)函數
當然註意這玩意兒一般不是積性函數,所以可能需要埃篩,還有就是這玩意兒就必須要維護的是前綴積了,並且這所有東西都是在指數上搞得,所以要模的是\(\phi\)

莫比烏斯反演總結