數論GPBH,因此開坑html
(照抄)參考函數
1.定義:ui
2.性質:spa
1.定義:htm
2.性質:blog
1.定義:get
2.性質:積性函數it
1.定義:io
2.性質:積性函數gc
1.定義:
2.性質:
1.定義:
2.性質:
1.定義:
2.性質:
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...