莫比烏斯反演---基礎


莫比烏斯反演---基礎

前置芝士:

1.數論函數

:指定義域為正整數陪域復數函數,每個算術函數都可視為復數的序列

​ ---來自百度百科

2.積性函數:

若f(x)為一個數論函數,且對於每一個互質的a,b滿足

\[f(a*b)=f(a)*f(b) \]

則f(x)為積性函數.

--完全積性函數:若f(x)為一個數論函數,且對於每一對a,b滿足

\[f(a*b)=f(a)*f(b) \]

則f(x)為完全積性函數.

例:積性函數有:

\[\\\sigma_{k}(n)(表示n的所有約數的k次冪的和) \\ \varphi(n)也為不超過n且與n互質的數的個數. \\ \mu(n) = \begin{cases} 1&n=1 \\ (-1)^k&n為k個不同質數的積\\ 0&else \end{cases} \]

完全積性函數有:

\[冪函數 n^k\\ 單位函數\epsilon(n)=\begin{cases} 1&n=1\\ 0&n>1 \end{cases} \]

把積性函數與狄利克雷卷積(下面要學)聯系起來,可以得到

若f,g為積性函數,則f*g也為積性函數.

\[(f*g)(a\times b)=\sum\limits_{d|ab}f(d)g(\frac{ab}{d})\\ 令d=d_1\times d_2\\ =\sum\limits_{d_1d_2|ab}f(d_1d_2)g(\frac{ab}{d_1d_2})\\ =\sum\limits_{d_1|a}f(d_1)g(\frac{a}{d_1})\times \sum\limits_{d_2|d}f(d_2)g(\frac{b}{d_2})\\ =(f*g)(a)\times (f*g)(b) \]

線性篩(實際上是利用線性篩求積性函數的值)

唯一分解定理:任何一個大於1的自然數 N,如果N不為質數,那么N可以唯一分解成有限個質數的乘積

那么有

\[\mathbf{f}(n)=\prod\limits_{i=1}^t\mathbf{f}(p_i^{k_i}) \]

於是我們就有另一種方法表示積性函數,即給出它在素數冪處的取值

當我們在線性篩的時候可以求出每個數的最小質因數\(p_1\),它的次數\(k_1\),那么

\[\mathbf{f}(n)=\mathbf{f}(p_1^{k_1})\mathbf{f}(\frac{n}{p_1^{k_1}}) \]

由上面的結論可知:

\[\sigma_0(n)=\prod\limits_{i=1}^t(k_i+1)\\ \phi(n)=\prod\limits_{i=1}^tp_i^{k_i-1}(p_i-1)=n\prod\limits_{i=1}^t(1-\frac{1}{p_i}) \]

(下面的那個是不是有點熟悉?就是課本上歐拉函數的求法)

3.函數之間的加法和數乘

\[(f+g)(n)=f(n)+g(n) \\加法\\(x\times f)(n)=x\times f(n),x\epsilon C\\ (c為常數) 數乘 \]

4.狄利克雷卷積(Dirichlet)

Dirichlet是個人,而且是一個很有名的人,今天我們不講這個人,我們講講他的狄利克雷卷積

狄利克雷乘積(Dirichlet product)亦稱狄利克雷卷積、卷積,是數論函數的重要運算之一。設f(n)、g(n)是兩個數論函數,它們的Dirichlet(狄利克雷)乘積也是一個數論函數,簡記為h(n)=f(n)*g(n)。---來自百度百科

\[(f*g)=\sum\limits_{ij=n}f(i)g(j)\\或\\(f*g)=\sum\limits_{d|n}f(d)f(\frac{n}{d}) \]

運算性質:滿足交換律,結合律,分配律;

交換律 即

\[(f*g)=(f*g)\\ \]

\[--------------\\ 證明:\\(f*g)(n)=\sum\limits_{ij=n}f(i)g(j)=\sum\limits_{ji=n}f(j)g(i)=(g*f)(n) \]

結合律:

\[(f*g)*h=f*(g*h) \]

\[證明:\\ [((f*g)*h)](n)=\sum\limits_{pq=n}[\sum\limits_{ij=p}f(i)g(j)]h(q)\\ =\sum\limits_{i|n}f(i)(\sum\limits_{jq=\frac{n}{i}}g(j)h(q))\\ =\sum\limits_{i|n}f(i)(g*h)(\frac{n}{i})\\ =(f*(g*h))(n) \]

分配律:

\[f*(g+h)=f*g+f*h \]

\[證明:\\ f*(g+h)=[f*(g+h)](n)\\ =\sum\limits_{d|n}f(d)\times[g(\frac{n}{d})+h(\frac{n}{d})]\\ =\sum\limits_{d|n}[f(d)g(\frac{n}{d})+f(d)h(\frac{n}{d})]\\ =f*g+f*h \]

單位元

在狄利克雷卷積中存在一種像單位矩陣一樣的"數",任何一個函數*這個"數"都會是其本身,我們把這個"數"叫做單位元,即前文所提到的單位函數

\[\epsilon(n)=\begin{cases}1&n=1\\ 0&n>1\\ \end{cases} \]

則有

\[(f*\epsilon)(n)=\sum\limits_{d|n,d\neq n}f(d)\epsilon(\frac{n}{d})+f(n)\epsilon(1)\\ =\sum\limits_{d|n,d\neq n}f(d)\times0+1\\] =f(n) \]

所以任何一個數論函數與單位元的卷積為數論函數本身(后文有重要運用)

逆元

其實逆元的概念和倒數差不多,即:

方程 ax\equiv 1(mod, : p) 的解稱為 a 關於模 p 的逆,當 gcd(a,p)=1(即 ap 互質)時,方程有唯一解,否則無解。

那么逆元可以用來干什么呢,比如說對於 (a/b), mod: p,並沒有 ((a: mod: p)/(b: mod:p)), mod: p,但是直接除又會爆精度,這時我們就可以用到逆元,假設用 inv(b) 代表 imgb 的逆元,那么(a/b),mod:p=(a*inv(b)),mod:p。 ____引用自forever_dreams的博客

上面的是數的逆元,狄利克雷卷積也有逆元:

定義:

\[對每個\mathbf{f}(1) \neq 0的函數\mathbf f ,都存在一個函數\mathbf{g}使得\mathbf{f}*\mathbf{g}=\epsilon \]

則如何求一個函數的逆?

定義

\[\mathbf{g}(n)=\frac{1}{\mathbf{f}(1)}\left([n=1]-\sum\limits_{ij=n,i\neq 1}\mathbf{f}(i)\mathbf{g}(j)\right) \]

\[\mathbf{f}*\mathbf{g}(n)\\ =\sum\limits_{ij=n}\mathbf{f}(i)\mathbf{g}(j)\\ =\mathbf{f}(1)\mathbf{g}(n)+\sum\limits_{ij=n,i\neq 1}\mathbf{f}(i)\mathbf{g}(j)\\=[n=1]=\epsilon(i) \]

把積性函數和逆元聯系起來得到 積性函數的逆元一定也是積性函數.

留與讀者自證之/笑哭.(注,積性函數一定滿足 f ( 1 ) = 1 )

莫比烏斯反演

\[我們定義1的逆是 \mu.\\ 這樣的話,如果g=f*1,就有f=f*1*\mu=g*\mu,\\ 換句話說,如果 \mathbf g(n)=\sum_{d\mid n}\mathbf f(d) \\就有 \mathbf f(n)=\sum_{d\mid n}\mu\left(\frac nd\right)\mathbf g(d) \]

\[引理 \\\mu*1=\epsilon\\ 即 \sum\limits_{d|n}\mu(d)=\epsilon(n)\\其中的"1"是一個返回值為1的常數函數 \]

證明:

\[設n有k個不同的質因子 \\n=p_1\times p_2\times ...\times p_k\\ 記一個函數q(s)為序列\mathbf{s}中所有元素的乘積\\ \mathbf{s}=\{{x_1,x_2...x_k}\};s序列長度為K \\令一個\mathbf{f}(s)的約數d=\mathbf{f}(j) \\j\subseteq s,\ \ \ \ j序列長度為J\\ \therefore \sum\limits_{d|n}\mu(d)=\sum\limits_{\mathbf{J}=0}^k\mu(f(j))\times (從K中取J個值(組合數))\\ 令i=J,則原式=\sum\limits_{i=0}^k\mu(d)^i(k中取i的組合)\\ 根據二項式定理,奇數項與偶數項和為0. 所以\sum\limits_{d|n}\mu(n) = \begin{cases} 1&n=1 \\ 0&n>1\\ \end{cases}=\epsilon(n) \]

求解μ

\[如何求\mu\ ?由於1是積性的,所以1的逆\mu也是積性的,則 \]

\[\mu(p^k)\begin{cases}1,&k=0\\-1,&k=1\\0,&k>1\end{cases} \]

\[\mu(x)=\begin{cases} 1,&x=1\\ (-1)^n, &x=\prod\limits_{i=1}^np_i\\ 0,&其余情況 \end{cases} \]

\[求\mu的函數 \]

void get_mu(int n)
{
    mu[1] = 1;
    for(int i = 2;i <= n; i++)
    {
        if(!vis[i])
		{
			pri[++cnt] = i;
			mu[i] = -1;
		}
        for(int j = 1; j <= cnt && pri[j] * i <= n; j++)
        {
            vis[pri[j] * i] = 1;
            if(i % pri[j] == 0) break;
            else mu[i * pri[j]] = -mu[i];
        }
    }
 }

這樣就證明了上述結論。

當然還有另一個方向的莫比烏斯反演(這個大概更常用)

\[\mathbf{g}(n)=\sum\limits_{n|d}\mathbf{f}(d)\iff \mathbf{f}(n)=\sum\limits_{n|d}\mu(\frac{d}{n})\mathbf{g}(d) \]

\[對此只需要定義 (\mathbf f\oplus\mathbf g)(x)=\sum_{x\mid y}\mathbf f(y/x)\mathbf g(y)=\sum\limits_{x|Y}f(y/x)g(y) ,並容易證明 (\mathbf f\ast\mathbf g)\oplus\mathbf h=\mathbf f\oplus(\mathbf g\oplus\mathbf h)。\\於是 \mathbf f=(\mu\ast\mathbf1)\oplus\mathbf f=\mu\oplus(\mathbf1\oplus\mathbf f)=\mu\oplus\mathbf g \]

莫比烏斯反演是一個很重要的數論知識,在做數論題的時候很有幫助,為了提高對於莫比烏斯反演的理解和掌握

建議去看看以下幾道題

YY的GCD

約數個數和

如果你看完了一遍,對於知識點還是沒有理解的話,建議重新看一遍,或者去以下的博客那里看一看,

本人就是從那里學習的

鈴懸的小知識


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM