數論GPBH,所以開坑
常見的數論函數
莫比烏斯函數$\mu$
1.定義:
- $\mu (1)=1$
- 若$d$沒有平方因子,$\mu (d) = (-1)^k$,$k$為$d$的質因數個數
- 否則$\mu (d)=0$
2.性質:
- 對於任意正整數$n$,有$\sum \limits_{d|n}\mu (d)=[n=1]$。
- $\mu$為積性函數。
- $\sum \limits _{d|n}\frac{\mu(d)}{d}=\frac{\phi(n)}{n}$
歐拉函數$\varphi $
1.定義:
- $\varphi (n)= \sum \limits _{i=1}^{n} [gcd(i,n)=1]$
2.性質:
- $\sum \limits _{d|n} \varphi (d)=n$
- $\varphi(n) = n * \prod (1 - \frac{1}{p_i})$
- $a^{\varphi(m)} \equiv 1 \pmod {m}$
- 對於$n=p^k$,有$\varphi(n) = (p - 1) * p^{k - 1}$
- 積性函數
約數個數$d()$
1.定義:
- RT
2.性質:積性函數
約數和$\sigma ()$
1.定義:
- RT
2.性質:積性函數
元函數$\epsilon$
1.定義:
- $\epsilon(n)=[n=1]$
2.性質:
- 對於任意積性函數$f$,有$f*\epsilon=f$。
- 積性函數
單位函數$I()$
1.定義:
- $I(n)$恆為1。
2.性質:
- 積性函數
恆等函數$id()$
1.定義:
- $id(n)=n$
2.性質:
- 積性函數
狄利克雷卷積
- 定義:對於兩個數論函數$f$和$g$,它們的狄利克雷卷積為$(f*g)(n)=\sum \limits_{d|n} f(d) \cdot g(\frac{n}{d})$。
- 性質:狄利克雷卷積滿足交換律、結合律和分配律。即:$f*g=g*f$ $(f*g)*h=f*(g*h)$ $(f+g)*h=f*h+g*h$
狄利克雷卷積的一些應用:
1.證明莫比烏斯反演:
假設我們已知:$F(n)=\sum_{d|n}f(d)$
考慮利用數論函數將它化成卷積的形式:$F=f*I$
兩邊卷上$\mu$,得到:
$F*\mu=f*I*\mu$
結合律?
$...=f*(I*\mu)$
回憶一下$\mu$的性質:
$\sum \limits _{d|n} \mu (d)= [n=1]$
也可以寫成:
$I* \mu = \epsilon$
那么有$...=f*\epsilon=f$
把它重新寫成普遍形式:$f=F*\mu \rightarrow f(n)=\sum_{d|n}\mu(d)\cdot F(\frac{n}{d})$
2.證明$\frac{\varphi(n)}{n}=\sum \limits _{d|n}\frac{\mu(d)}{d}$
還記得$\varphi$的性質嘛?
$\sum \limits _{d|n} \varphi (d)=n$
表示成卷積的形式就是$\varphi * I = id$
跟上一個證明類似,如果兩邊都卷上$\mu$:
$\varphi * I * \mu = id * \mu$
$\varphi * \epsilon =id* \mu $
$\varphi = id * \mu \rightarrow \sum \limits _{d|n} \mu (d) \cdot \frac{n}{d}$
兩邊同時除以$n$即得證。
杜教篩
終於到了這個大坑……
杜教篩解決的是要求在低於線性時間內求積性函數前綴和的問題。
假設我們要求 $S(n)=\sum \limits _{i=1}^n f(i)$
那么首先構造兩個積性函數$g$和$h$,滿足$h=f*g$。
顯然有:
$\sum \limits _{i=1}^{n}h(i)=\sum \limits _{i=1}^{n}\sum \limits _{d|i}g(d)\cdot f(\frac{i}{d})\\\to =\sum \limits_{d=1}^{n}g(d)\cdot\sum \limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}f({i})$
停一下。這一步可能會看起來比較懵逼,其實就是把原來先枚舉每個數再枚舉它的因數,變成了枚舉因數並考慮$n$的范圍內有多少個數包含它。
我們繼續:
$\sum \limits _{i=1}^{n}h(i)=\sum \limits _{d=1}^{n}g(d)\cdot S(\lfloor\frac{n}{d}\rfloor)$
拆出第一項:
$\sum \limits _{i=1}^{n}h(i)=g(1)\cdot S(n)+\sum \limits _{d=2}^{n}g(d)\cdot S(\lfloor\frac{n}{d}\rfloor)$
$g(1)S(n)=\sum \limits _{i=1}^{n}h(i)-\sum \limits _{d=2}^{n}g(d)\cdot S(\lfloor\frac{n}{d}\rfloor)$
到了這步,如果你能快速求出$h(i)$的前綴和,就可以通過對后面那項進行整除分塊來求出$S(n)$。時間復雜度為$O(n^{\frac{2}{3} })$。
比如我們要求的$f$是$\mu$,那根據$\mu*I=\epsilon$可以得到:
$S(n)=1-\sum \limits _{d=2}^{n}S(\lfloor\frac{n}{d}\rfloor)$
篩$\varphi$也是同理,利用$\varphi*I=id$即可。(其實是我懶得寫了所以就同理啦QAQ)
(然而代碼實現還不是很熟練……先咕了)
To Be Continued...