1. 程式人生 > 實用技巧 >學習總結-莫比烏斯反演

學習總結-莫比烏斯反演

(〇)前置知識

1.數論的基礎知識(關於質數,約數)

2.二項式定理

3.數論分塊*

4.積性函式*

5.\(Dirichlet\)卷積*

6.莫比烏斯函式*

注:帶"*"號的本文會具體闡述

(一)數論分塊

引理1:

\[\forall a,b,c\in \mathbb{Z},\lfloor{\dfrac{a}{bc}}\rfloor=\lfloor \dfrac{\lfloor\frac{a}{b}\rfloor}{c}\rfloor \]

這個公式比較容易理解,不詳細闡述了。

略證一下:

\(\dfrac{a}{b}=\lfloor\dfrac{a}{b}\rfloor+r(0\leq r<1)\)

\(\lfloor\dfrac{a}{bc}\rfloor=\lfloor\dfrac{a}{b}\cdot\dfrac{1}{c}\rfloor=\lfloor\dfrac{\lfloor\frac{a}{b}\rfloor}{c}+\dfrac{r}{c}\rfloor=\lfloor\dfrac{\lfloor\frac{a}{b}\rfloor}{c}\rfloor\)

引理2:

\[\forall n\in\mathbb{N_+},|\{ \lfloor\dfrac{n}{d}\rfloor|d\in\mathbb{N_+},d\leq n\}|\leq\lfloor 2 \sqrt{n}\rfloor \]

這個引理描述了\(\lfloor \dfrac{n}{d}\rfloor\)的解的集合大小不會超過\(2\sqrt{n}\)

容易證明。

由此,我們可以得到一個演算法:數論分塊

先來看這樣的一個問題:求\(\sum\limits_{i=1}^{n} \lfloor\dfrac{n}{i}\rfloor\)

如果我們列舉每個\(i\),那麼顯然時間複雜度是\(\Theta(n)\),有沒有更快的演算法?

根據引理2我們可以知道,對於所有\(\lfloor\dfrac{n}{i}\rfloor\),至多隻有\(2\sqrt{n}\)個不同的解。

直觀感受一下:

不難發現,\(\lfloor\dfrac{n}{i}\rfloor\)

的值是一段一段的(在一個連續的區間內),而這個區間的右端點恰好是\(\lfloor\dfrac{n}{\lfloor\frac{n}{i}\rfloor}\rfloor\)的值。

證明略。程式碼如下:

for(int l = 1, r; l <= n; l = r+1){
	r = n/(n/l);
	f(l, r);
}

[拓展]二維數論分塊

什麼是二維數論分塊?

舉個例子,如果我們要在求\(\lfloor\dfrac{n}{i}\rfloor\)的同時求出\(\lfloor\dfrac{m}{i}\rfloor\),這時就需要用到二維數論分塊。

程式碼實現很簡單隻需要加上一行:

for(int l=1, r; l <= min(n, m); l = r+1){
	r = min(n/(n/l), m/(m/l));
	f(l, r);
}

(二)積性函式

定義

若函式\(f(n)\)滿足\(f(1)=1\)\(\forall x,y\in \mathbb{N_+},\gcd(x,y)=1\)都有\(f(xy)=f(x)f(y)\),則\(f(n)\)積性函式

若函式%f(n)%滿足\(f(1)=1\)\(\forall x,y\in\mathbb{N_+}\)都有\(f(xy)=f(x)f(y)\),則\(f(x)\)完全積性函式

性質

\(f(x)\)\(g(x)\)均為積性函式,則以下函式也為積性函式。

\[h(x)=f(x^p) \]

\[h(x)=f^p(x) \]

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

\[h(x)=\sum\limits_{d|x}f(d)g(\dfrac{x}{d}) \]

\(x= \prod p_{i}^{k_i}\)其中\(p_i\)是質數

\(F(x)\)為積性函式,則有\(F(x)=\prod F(p_i^{k_i})\)

\(F(x)\)為完全積性函式,則有\(F(x)=\prod F(p_i)^{k_i}\)

舉例

單位函式:\(\varepsilon=[n=1]\)(完全積性函式)

恆等函式:\(\operatorname{id}_k(n)=n^k\)其中\(\operatorname{id}_1(n)\)簡記作\(\operatorname{id}(n)\)(完全積性函式)

常數函式:\(\operatorname{1}(n)=1\)(完全積性函式)

除數函式:\(\sigma_k(n)=\sum\limits_{d|n}d^k\)(積性函式)

尤拉函式:\(\varphi(n)=\sum\limits_{i=1}^{n}[\gcd(i,n)=1]\)(積性函式)

(三)\(Dirichlet\)卷積

又稱“狄利克雷卷積”。

定義

定義兩個數論函式\(f,g\)\(Dirichlet\)卷積為:

\[(f*g)(n)=\sum\limits_{d|n} f(d)g(\dfrac{n}{d}) \]

性質

\(Dirichlet\)卷積滿足一下運算規律:

1.交換律:\(f*g=g*f\)

2.結合律:\((f*g)*h=f*(g*h)\)

3.分配律:\(f*(g+h)=f*g+f*h\)

4.\(f*\varepsilon=f\)其中\(\varepsilon\)\(Dirichlet\)卷積的單位元

例子(公式)

\[\varepsilon=\mu*1\iff \varepsilon(n)=\sum \limits_{d|n}\mu(d) \]

\[d=1*1\iff d(n)=\sum\limits_{d|n}1 \]

\[\sigma = \operatorname{id}*1\iff \sigma(n)=\sum\limits_{d|n}d \]

\[\varphi=\mu*\operatorname{id}\iff \varphi (n)=\sum\limits_{d|n}d\cdot\mu(\dfrac{n}{d}) \]

(四)莫比烏斯函式

定義

\(\mu\)為莫比烏斯函式,定義為

\[\mu(n)=\begin{cases}1&n=1\\0&\exists p>1:p^2|n\\(-1)^{\omega(n)}&otherwise\end{cases} \]

其中\(\omega(n)\)表示\(n\)的本質不同質因子個數,它也是一個積性函式。

性質(敲黑板)

除了積性函式的性質以外,莫比烏斯函式還有如下性質

\[\sum\limits_{d|n}\mu(d)=\begin{cases}1&n=1\\0&n\not=1\end{cases} \]

\[\sum\limits_{d|n}\mu(d)=\varepsilon(n),\mu*1=\varepsilon \]

證明:

\(n=\prod\limits_{i=1}^{k}p_i^{c_i},n'=\prod\limits_{i=1}^kp_i\)

那麼\(\sum\limits_{d|n}^k\mu(d)=\sum\limits_{d|n'}^k\mu(d)\)

(解釋:因為由莫比烏斯函式的定義可知,當\(c_i>1\)時,\(\mu(p^{c_i})=0\))

\(\sum\limits_{d|n'}=\mu(d)=\sum\limits_{i=0}^kC_k^i\cdot(-1)^i\)

(解釋:因為\(n'\)的因子全是由質數\(p_i\)組成的,所以在\(n'\)\(k\)個質因子中選出\(i\)個可以組合成\(n'\)的所有因子,然後根據選出的質因子個數判斷符號是正是負)

(\(ps\):到了這一步有沒有發現很像某個定理)

根據二項式定理:

\[(a+b)^n=\sum\limits_{i=0}^n\dbinom{k}{i}a^{n-i}b^i \]

得:

\(\sum\limits_{i=0}^{k}C^i_k\cdot(-1)^i=\sum\limits_{i=0}^{k}\dbinom{k}{i}\times1^{n}\times(-1)^i=(1-1)^k=0^k\)

該式子的值在\(k=0\)時即\(n=1\)時值為\(1\),否則為\(0\)。所以,

\(\sum\limits_{d|1}^n\mu(d)=[n=1]=\varepsilon(n),\mu*1=\varepsilon\)

線性篩

問題來了,知道了性質,如何求莫比烏斯函式?

使用線性篩。線性篩基本可以求所有的積性函式,莫比烏斯函式也在其中。

程式碼:

	mu[1] = 1;
	for(int i=2; i<=N; i++){
		if(!vis[i]) prime[++cnt] = i, mu[i] = -1;//找出素數,素數的莫比烏斯函式值為-1 
		for(int j=1; j<=cnt and i*prime[j] <= N; j++){
			vis[i*prime[j]] = true;//標記以當前素數為最小質因子的合數 
			if(i%prime[j] == 0){
				mu[i*prime[j]] = 0;//如果該合數由兩個相同的質因子,莫比烏斯函式值為0 
				break;
			}
			mu[i*prime[j]] = -mu[i]; 
		}
	}

(五)莫比烏斯反演

\(f(n),g(n)\)為兩個數論函式,

如果有\(f(n)=\sum\limits_{d|n}g(d)\),那麼有\(g(n)=\sum\limits_{d|n}\mu(d)\cdot f(\dfrac{n}{d})\)

如果有\(f(n)=\sum\limits_{n|d}g(d)\),那麼有\(g(n) = \sum\limits_{d|n}\mu(\dfrac{d}{n})\cdot f(d)\)

換一種更加簡潔的寫法,狄利克雷卷積:

\(f=g*1\iff f*\mu=g\)

另外幾個常用公式

\(\varepsilon=\mu*1\iff [x=1]=\sum\limits_{d|n}\mu(d)\)

\(\varphi*1=\operatorname{id}\iff \varphi=\operatorname{id}*\mu\)

好了,公式看了這麼多,來做幾組練習。

練習(練習中設\(N\leq M\))

1.求\(\sum\limits_{i=1}^N\sum\limits_{j=1}^{M}[\gcd(i,j)=1]\)

解:原式\(=\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{M}\varepsilon(\gcd(i,j))\\=\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{M}\sum\limits_{d|(i,j)}\mu(d)\\=\sum\limits_{d=1}^{N}\mu(d)\cdot\sum\limits_{i=1}^{\lfloor\frac{N}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{M}{d}\rfloor}1\\=\sum\limits_{d=1}^{N}\mu(d)\lfloor\dfrac{N}{d}\rfloor\lfloor\dfrac{M}{d}\rfloor\)

2.求\(\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{M}[\gcd(i,j)=k]\)

解:原式\(=\sum\limits_{i=1}^{\lfloor\frac{N}{k}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{M}{k}\rfloor}[\gcd(i,j)=1]\)

然後用與練習1一樣的方式求解即可。

3.求\(\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{M}\operatorname{lcm}(i,j)\)

解:原式\(=\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{M}\dfrac{ij}{\gcd(i,j)}\\=\sum\limits_{d=1}^{N}\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{M}[\gcd(i,j)=d]\dfrac{ij}{d}\\=\sum\limits_{d=1}^{N}d\sum\limits_{i=1}^{\lfloor\frac{N}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{M}{d}\rfloor}ij[\gcd(i,j)=1]\\=\sum\limits_{d=1}^{N}d\sum\limits_{i=1}^{\lfloor\frac{N}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{M}{d}\rfloor}ij\sum\limits_{x|(i,j)}\mu(x)\\=\sum\limits_{d=1}^{N}d\sum\limits_{x=1}^{\lfloor\frac{N}{d}\rfloor}\mu(x)x^2\sum\limits_{i=1}^{\lfloor\frac{N}{dx}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{M}{dx}\rfloor}ij\\=\sum\limits_{d=1}^{N}d\sum\limits_{x=1}^{\lfloor\frac{N}{d}\rfloor}\mu(x)x^2\dfrac{\lfloor\frac{N}{dx}\rfloor(\lfloor\frac{N}{dx}\rfloor+1)\lfloor\frac{M}{dx}\rfloor(\lfloor\frac{M}{dx}\rfloor+1)}{4}\)

真不容易~

留坑待補。