學習總結-莫比烏斯反演
(〇)前置知識
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\)
證明略。程式碼如下:
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}\)
真不容易~
留坑待補。