1. 程式人生 > >各種反演和篩的總結

各種反演和篩的總結

各種反演和篩的總結

可以說是從零開始學了。

主要記錄對這些東西的理解過程。

希望有發現錯誤的大佬能及時指出。


反演

對於兩個函式\(f(x)\)\(g(x)\),我們有從\(f\)\(g\)的關係式。

\(g(n)=\sum^{n}_{i=0}A_{n,i}f(i)\)

其中\(A_{n,i}\)表示某種型別的計算方式,比如說組合關係或者倍數關係之類的。

那麼很顯然直接代入此式就會很方便\(f->g\)的推導。

而如果我們要求\(g->f\)的推導怎麼辦。

於是我們引入了反演

很顯然並不是所有式子都可以有優秀的反演方法。


二項式反演

二項式相關,此時\(A_{n,i}\)

是一個組合數的形式。

用更常見的形式:

\(g(n)=\sum_{i=0}^{n}{n\choose i}f(i)\)

\(f(n)=\sum_{i=0}^{n}(-1)^{n-i}{n\choose i}g(i)\)或者換下下標\(f(n)=\sum_{i=0}^{n}(-1)^{i}{n\choose i}g(n-i)\)

我們想想係數為什麼是正負一。

我們考慮\(f(k)\)內的每一個貢獻,它在\(i<k\)的時候會被計算的次數為:

\(\sum^{k-1}_{i=0}(-1)^{i}{k\choose i}\)

具體一點的意義,把以上式子用一個例項表述:

一共有\(n\)

個人,每個人都有自己的座位,現在讓他們都不坐在自己的座位上,求方案數。(錯排問題)

那麼所求就是\(f(n)\)表示恰好有\(n\)個人坐不到自己的座位上的方案數

\(g(n)\)表示所有坐座位的方案,那麼\(g(n)=n!\) 表示這\(n\)個人隨便坐。

\(g(n)=\sum_{i=0}^{n}{n\choose i}f(n-i)\)表示列舉\(i\)個人坐到自己的座位,再組合數選出這些人,然後其他人錯排。

化一下下標\(g(n)=\sum_{i=0}^{n}{n\choose i}f(i)\),是不是熟悉的式子了。


回到上面例項前的那個式子

\(f(k)\)中的貢獻相當於是恰好有\(k\)

個人坐不到自己座位的方案

考慮對於每一種方案,這裡相當於從\(0\)\(n\)列舉坐到自己座位上的人,所以在\(i<k\)的時候同樣會計算到這些方案,而計算到的次數為:\(\sum^{k-1}_{i=0}(-1)^{i}{k\choose i}\)

這個自己理解一下。

把上面那個式子拆開變成 \(\sum^{k}_{i=0}(-1)^{i}{k\choose i}-(-1)^{k}{k\choose k}\)

\(k!=0\),所以左邊根據組合數的性質就是\(0\),而右邊剩下了\(-(-1)^k\)

也就是說多算了\(-(-1)^k\)遍,我們加回來就好了。


其實上面那個就是容斥。

或者說整個二項式反演都是容斥。

或者說這些反演都用到了容斥。


總是有一種這些都是別人構造好的東西的感覺。

反演的實質去\(yyb\)那看?或者百度也行,我記得看到了一篇不錯的。

初學呢哪那麼厲害。


莫比烏斯反演

這個時候的\(A_{n,i}\)不一樣了:

\(g(n)=\sum_{d|n} f(d)\)

相當於所有\(n\)的因數的\(f\)加起來,那這個怎麼做啊。

先放式子:\(f(n)=\sum_{d|n}\mu(\frac{n}{d})g(d)\)

這種情況顯然複雜一些,\(\mu\)在這裡相當於構造了一個函式,為了滿足這個反演。

對於初學者而言,我們顯然可以通過打表的優秀方式發現這個\(\mu\)的規律:

\(\mu(1)=1\)

根據唯一分解定理將一個數\(n\)分解為\(\prod_{i=1}^{t}p_i^{a_i}\)\(t\)為質因子個數

那麼若存在\(a_i>1\)\(\mu(n)=0\),否則\(\mu(n)=(-1)^t\)

多手玩一下,就能更深刻地理解其中的關係。

另外我們把式子變個形,可以得到:

\(g(n)=\sum_{n|d}f(d)\),則有

\(f(n)=\sum_{n|d}\mu(\frac{d}{n})g(d)\)

這個要有個統一的上界,兩式本質相同。


作為初學者,先得會用這些東西。

要知道在哪用以及怎麼用

看到題列出式子一定要嘗試向這些東西上靠,在做多了題之後就會理解了。


斯特林反演(待更)

單位根反演(待更)



篩法

杜教篩(待更)

\(min\_25\)篩(待更)