莫比烏斯反演
前言
很早之前就想講一講莫比烏斯反演,但由於事務較為繁忙,一直耽誤至今。一方面,莫比烏斯反演是數論中非常重要的一個變換,另一方面,我的博客名也受此啟發而得(雖然莫比烏斯反演和莫比烏斯環沒有半毛錢關系)。
廢話不多說,下面我們進入正題。
莫比烏斯函數
要想學習莫比烏斯反演,首先必須了解的就是莫比烏斯函數 \(\mu(d)\) 。
什么是莫比烏斯函數呢?下面是它的定義:
1、 \(\mu(1)=1\);
2、 當 \(d\) 為素數時, \(\mu(d)=-1\);
3、 當 \(d\) 為合數時,由數論知識可得其必能唯一地表示成若干素數之積,不妨令
若 \(d\) 中 \(k\) 個不同的質因子中有任一項的系數 \(m_i\) 大於等於2,則 \(\mu(d)=0\) ,否則 \(\mu(d)=(-1)^k\) 。
用程序實現 \(\mu\) 的賦值並不難,只要在線性篩素數的基礎上略加修改即可,我就貼一段代碼吧。
void get_mu(int n)
{
int cnt=0;
mu[1]=1;
for(int i=2;i<=n;i++)
{
if(!com[i])
{
prim[cnt++]=i;
mu[i]=-1;
}
for(int j=0;j<cnt&&prim[j]*i<=n;j++)
{
com[prim[j]*i]=1;
if(i%prim[j]==0)
break;
else
mu[i*prim[j]]=-mu[i];
}
}
}
由此,我們初步了解了莫比烏斯函數 \(\mu(d)\) 的定義。當然,它有一些非常有趣的性質:
- 對於任意正整數 \(n\) ,\(\sum\limits_{d|n}{\mu(d)}=[n=1]\) ( \(d|n\) 的意思是 \(d\) 整除 \(n\) , \([n=1]\) 表示只有當 \(n=1\) 時為 \(true(1)\) ,否則為 \(false(0)\) )。
- 對於任意正整數 \(n\) ,\(\sum\limits_{d|n}{\frac{\mu(d)}{d}}=\frac{\phi(n)}{n}\) ( \(\phi(n)\) 為歐拉函數)。
其中第一條性質尤為重要,具體該怎么證明呢?
首先當 \(n=1\) 時,其約數 \(d\) 只有 \(1\) ,所以 \(\sum\limits_{d|1}{\mu(d)}=\mu(1)=1\)。
當 \(n\geq 2\) 時,由離散數學的知識,\(n\) 必能表示成若干素數的乘積且唯一(這個用反證法即可證明),即
下面如何求 \(\sum\limits_{d|n}{\mu(d)}\) 呢?我們需要枚舉 \(n\) 的約數 \(d\) 。顯然, \(d\) 同樣可以表示為若干質數的乘積(質數的冪可以為0)。對於分解成質數之積后存在一個質數的冪次大於1的 \(d\) 我們並不需要關注,因為這樣的 \(d\) 的 \(\mu(d)=0\) 。我們只需要關注分解后所有的質數的冪次都小於等於1的 \(d\)。
這樣的 \(d\) 到底有多少個呢?根據簡單的排列組合知識可知共有 \(2^k\) 個(\(k\) 為 \(n\) 分解后不同質數的個數)。我們要將這 \(2^k\) 個進行分類。
其中分解后質數的個數為偶數(包括0)的共有\(\sum\limits_{i=0}^{\lfloor\frac{k}{2}\rfloor}{C_k ^{2i}}\) 個,奇數的共有\(\sum\limits_{i=1}^{\lceil\frac{k}{2}\rceil}{C_k ^{2i-1}}\) 個。
組合數中有一條重要的性質,就是奇數項之和等於偶數項之和,也就是說上面兩個式子是相等的。也就是說 \(n\) 的約數 \(d\) 分解成若干冪次為1的質數之積后,質數個數為奇數的 \(d\) 與質數個數為偶數的 \(d\) 的個數相等。
再回到莫比烏斯函數本身,滿足 \(\mu(d)=1\) 和 \(\mu(d)=-1\) 的 \(d\) 的個數相同,所以 \(\sum\limits_{d|n}{\mu(d)}=0\; (n\geq 2)\) 。
由此,第一條性質證明結束。
第二條性質證明比較難,涉及到歐拉函數的知識,這篇文章就不重點介紹了。
莫比烏斯反演
經過長篇幅的介紹莫比烏斯函數后,我們現在終於可以迎來本文的核心:莫比烏斯反演。
下面是莫比烏斯反演定理:
對於定義在非負整數集合上的兩個函數 \(F(n)\) 和 \(f(n)\) ,並且滿足條件:
則有結論
有定理就有證明,下面我就簡單地證明一下:
倒數第二步的推導需要反過來思考(枚舉約數 \(i\) ),至於最后一步就用到了之前的第一條性質,只有當 \(\frac{n}{i}=1\) 即 \(i=n\) 時 \(\sum\limits_{d|\frac{n}{i}}{\mu(d)}=1\) ,其余情況皆為 \(0\) ,所以最后推得結果為 \(f(n)\) 。
至此,莫比烏斯反演的介紹也差不多結束了。碼字不易,感謝關注。