前言?html
終於放假了~~感受再不趁機頹會兒我博客就廢了……ide
趕忙寫點東西刷刷存在感(騙點積分)函數
莫比烏斯函數學習
定義一種函數$\mu(d)$,知足:spa
1.若$d=1$,則$\mu(d)=1$。code
2.若$d=p_1p_2p_3\cdots p_k$且$p_i$爲互異素數時,$\mu(d)=(-1)^k$。htm
3.其餘狀況$\mu(d)=0$。blog
那麼咱們將函數$\mu(d)$稱做莫比烏斯函數。rem
看上去很NB?get
通俗一點,就是對於1來講$\mu(1)=1$,其餘數的話若數d包含相同質因子則$\mu(d)=0$,若質因子各不相同,那麼若x有奇數個質因子$\mu(d)=-1$,不然$\mu(d)=1$。
莫比烏斯函數有許多神奇的性質(就知道兩個):
性質一:$\sum\limits_{d|n}\mu(d) = [n==1]$
證實:
[n==1]意思就是當且僅當n=1時返回1,不然返回0。
$n=1$時顯然成立。
$n \neq 1$時,首先對於$\mu(d)=0$的狀況咱們能夠直接忽略,只需考慮$\mu(d)\neq 0$,即$d=p_1^{c_1}p_2^{c_2}\cdots p_k^{c_k}$且對於$\forall i\in [1,k]\ c_i=1$的狀況。
設$n=p_1^{c_1}p_2^{c_2}\cdots p_i^{c_i}$,則d的質因子個數是j的狀況一共有$C_i^j$種。
那麼根據莫比烏斯函數的定義咱們能夠獲得\begin{array}{lcl}\sum\limits_{d|n}\mu(d) & = & C_i^0-C_i^1+C_i^2-\cdots +(-1)^iC_i^i \\& = & \sum\limits_{j=0}^i(-1)^jC_i^j \end{array}
就是說咱們只須要證實$\sum\limits_{j=0}^i(-1)^jC_i^j = 0$就能夠了。
這個東西就是個裸的二項式定理,不會二項式定理的話能夠參考個人另外一篇博客(又開始騙閱讀了)。
因而咱們就愉快的證實出了性質一。
性質二:$\sum\limits_{d|n}\frac{\mu(d)}{d}=\frac{\phi(n)}{n}$
其中$\phi(n)$爲歐拉函數(來看莫比烏斯反演的應該不會不知道吧……)。
這個性質會在下面講狄利克雷卷積時證實。
求法:
求單個數的莫比烏斯函數直接分解質因數便可。
若求1~n項的莫比烏斯函數值,咱們能夠用Eratosthenes篩法計算。
#include<cstdio> using namespace std; int const N=1e5+5; int miu[N]; bool v[N]; inline void get_miu(int n){ for(register int i=1;i<=n;++i) miu[i]=1; for(register int i=2;i<=n;++i){ if(v[i])continue; miu[i]=-1; for(register int j=i<<1;j<=n;j+=i){ v[j]=1; if((j/i)%i)miu[j]=-miu[j]; else miu[j]=0; } } return ; } int main(){ int n; scanf("%d",&n); get_miu(n); return 0; }
也能夠線性篩,只要在線性篩素數的基礎上略作修改便可。
#include<cstdio> using namespace std; int const N=1e5+5; int miu[N],prime[N],tot; bool v[N]; inline void get_miu(int n){ miu[1]=1; for(register int i=2;i<=n;++i){ if(!v[i])prime[++tot]=i,miu[i]=-1; int zz=-miu[i]; for(register int j=1;j<=tot;++j){ int now=prime[j]*i; if(now>n)break; v[now]=1; if(i%prime[j])miu[now]=zz; else break; } } return ; } int main(){ int n; scanf("%d",&n); get_miu(n); return 0; }
狄利克雷卷積
在學習狄利克雷卷積以前咱們先了解一個東西叫作數論函數。
咱們沒必要熟悉整個數論函數的體系,咱們只須要了解一些常見數論函數便可。
而若是一個數論函數f對於任意兩個互質的正整數a,b知足$f(a\times b)=f(a)\times f(b)$,咱們把函數f稱做積性函數。
注意積性函數與積性函數的乘積仍爲積性函數。
咱們見到的大部分數論函數都是積性函數,下面舉一些例子:
1.$\phi(n)/\varphi(n)$ 歐拉函數 表示1~n中與n互質的數的個數。$\phi(n)=\sum\limits_{i=1}^n[gcd(n,i)==1]$
2.$\mu(n)$ 莫比烏斯函數 上面應該已經說的很清楚了,再也不贅述。
3.$d(n)$ 約數個數 表示n的正因子個數 $d(n)=\sum\limits_{d|n}1$
4.$\sigma(n)$ 約數和函數 表示n的全部正因子之和 $\sigma(n)=\sum\limits_{d|n}d$
5.$\epsilon(n)/e(n)$ 元函數 對於狄利克雷卷積的乘法單位 $\epsilon(n)=[n==1]$
6.$1(n)$ 恆等函數 恆爲1 $1(n)=1$
7.$Id(n)$ 單位函數 就是自己的大小 $Id(n)=n$
若函數f對於任意一個正整數對(a,b)都知足$f(a\times b)=f(a)\times f(b)$,那麼咱們把函數f稱做徹底積性函數。
上面積性函數例子的5,6,7都是徹底積性函數。
全部狄利克雷特徵(一種數論函數,想了解的問度娘去)都是徹底積性函數。
下面,咱們正式開始講解狄利克雷卷積。
定義一種運算$*$,對於函數f,g知足$(f*g)(n)=\sum\limits_{d|n}f(d)g(\frac{n}{d})$,咱們把這種運算$*$稱做狄利克雷卷積。
狄利克雷卷積知足交換律,結合律以及分配律。
上面解釋元函數$\epsilon(n)$時說到元函數是對於狄利克雷卷積的乘法單位,元函數能夠在狄利克雷卷積中充當單位元,即$f*\epsilon=f$。
對於一個函數f,若是$f(1)\neq 0$,則都存在函數g知足$f*g=\epsilon$,咱們把g稱做f的逆元。
從某巨神的博客偷的逆元式子:
$g(n)=\frac{1}{f(1)}\left([n==1]-\sum\limits_{d|n,d\neq 1}f(d)g(\frac{n}{d})\right)$
$\sum\limits_{d|n}f(d)g(\frac{n}{1})=f(1)g(n)+\sum\limits_{d|n,d\neq 1}f(d)g(\frac{n}{d})=[n==1]$
下面列舉幾種卷積關係:
1.$d=1*1$
2.$\sigma=d*1$
3.$Id=\phi*1$
4.$\epsilon=\mu*1$
5.$\phi=\mu*Id$
6.$1=\mu*d$
證實:
1,2顯然(直接把函數表達式代入就好了)。
3:
\begin{array}{lcl}Id(n) & = & \sum\limits_{i=1}^n\sum\limits_{j=1}^n[gcd(i,n)==j] \\& = & \sum\limits_{j|n}\sum\limits_{i=1}^{\lfloor\frac{n}{j}\rfloor}[gcd(i,\frac{n}{j})==1] \\& = & \sum\limits_{j|n}\phi(\frac{n}{j}) \end{array}
即 $Id=\phi*1$
其實就是歐拉函數的一個性質:$\sum\limits_{d|n}\phi(d)=n$
4就是莫比烏斯函數的性質一,上面已經證實過,再也不贅述。
5:
我好像說莫比烏斯函數的性質二要在講狄利克雷卷積時證實?
這個5其實就是$\mu(n)$的性質二。
\begin{array}{cc}Id & = & \phi*1 \\Id*\mu & = & \phi*1*\mu \\Id*\mu & = & \phi*\epsilon \\Id*\mu & = & \phi \\ \sum\limits_{d|n}\mu(d)\frac{n}{d} & = & \phi(n) \\ \sum\limits_{d|n}\frac{\mu(d)}{d} & = & \frac{\phi(n)}{n} \end{array}
證畢。
6.
\begin{array}{cc}d & = & 1*1\\d*\epsilon & = & 1*1\\ d*\mu*1 & = & 1*1\\ d*\mu & = & 1 \end{array}
證畢。
莫比烏斯反演
$f(n)=\sum\limits_{d|n}g(d) \Leftrightarrow g(n)=\sum\limits_{d|n}\mu(d)f(\frac{n}{d})$
另外一種形式:$f(n)=\sum\limits_{n|d}g(d) \Leftrightarrow g(n)=\sum\limits_{n|d}\mu(\frac{d}{n})f(d)$
咱們先證實第一種形式。
已知$f(n)=\sum\limits_{d|n}g(d)$
則\begin{array}{lcl}\sum\limits_{d|n}\mu(d)f(\frac{n}{d}) & = & \sum\limits_{d|n}\mu(d)\sum\limits_{i|\frac{n}{d}}g(i) \\& = & \sum\limits_{d|n}\sum\limits_{i|\frac{n}{d}}\mu(d)g(i) \\& = & \sum\limits_{i|n}\sum\limits_{d|\frac{n}{i}}\mu(d)g(i) \\& = & \sum\limits_{i|n}g(i)\sum\limits_{d|\frac{n}{i}}\mu(d) \\& = & g(n)\end{array}
得證。
然而事實上能夠用狄利克雷卷積證實。
$f(n)=\sum\limits_{d|n}g(d)$能夠表示爲$f=g*1$
則\begin{array}{lcl}f*\mu & = & g*1*\mu \\& = & g*(1*\mu) \\& = & g*\epsilon \\& = & g \end{array}
帶入就能夠獲得莫比烏斯反演的兩種形式了……