1. 程式人生 > >杜教篩

杜教篩

前綴和 http 歐拉 相同 zoj 證明 down 網頁 body

…因為網頁崩潰導致要重寫一遍……
首先看一道板子題:bzoj 3944 https://www.cnblogs.com/lokiii/p/8329320.html
要求在低於線性的時間內莫比烏斯函數和歐拉函數的前綴和。因為都是積性函數,所以這裏以mu為例。設 \( f(n)=\sum_{d|n}\mu(d) g(n)=\sum_{i=1}^{n}f(i) s(n)=\sum_{i=1}^{n}\mu(i)\) ,然後很顯然對於mu \(g(n)=1 \),對於phi \( g(n)=n*(n+1)/2 \),然後可以這樣轉化一下:
\[ g(n)=\sum_{i=1}^{n}\sum_{d|n}\mu(d) \]


\[ =\sum_{d=1}^{n}\mu(d)\left \lfloor \frac{n}{d} \right \rfloor \]
\[ =\sum_{d=1}^{n}s(\left \lfloor \frac{n}{d} \right \rfloor) \]
\[ s(n)=g(n)-\sum_{d=2}^{n}s(\left \lfloor \frac{n}{d} \right \rfloor) \]
然後遞歸求解子問題即可。
類似的題還有:

51nod 1224 https://www.cnblogs.com/lokiii/p/8334589.html

51nod 1239 https://www.cnblogs.com/lokiii/p/8333844.html

其實是一樣的但是時間卡的比較死。

通過這些題可以發現杜教篩的套路就是把一個問題轉換為幾個形式相同但範圍更小的問題遞歸求解,從而做到低於線性的復雜度。子問題的構造一般是用一個叫狄利克雷卷積的東西,不過我比較習慣瞎推,因為套路就那麽幾個,推起來也方便。

以下整理一些常見的推導套路:
1、
\[ \sum_{d|n}\mu(d)=0(n!=1) \]

證明:

\[ \sum_{i=0}^{k}C_k^i(-1)^k=(1-1)^k \]

2、設F(n)為1到n中無平方因子數的個數

\[ F(n)=\sum_{i=1}^{\sqrt{n}}\mu(i)\left \lfloor \frac{n}{i^2} \right \rfloor \]

3、設 \( f(d)=\sum_{k|d}\mu(k)k \),p為質數

\[ f(p^k)=f(p)=1-p \]

4、

\[ \sum_{d|n}\mu(d)\frac{n}{d}=\phi(d) \]

證明:

\[ \phi(n)=\sum_{i=1}^{n}[gcd(i,n)==1] \]

\[ =\sum_{i=1}^{n}\sum_{d|i,d|n}\mu(d) \]

\[ =\sum_{d|n}\mu(d)\left \lfloor \frac{n}{d} \right \rfloor=\sum_{d|n}\mu(\left \lfloor \frac{n}{d} \right \rfloor)d \]

5、設 d為約數個數 ,\( d(ij)=\sigma_0(ij) \)

\[ d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1] \]

例:bzoj 4176 https://www.cnblogs.com/lokiii/p/8331366.html

6、設 d為約數個和,\( d(ij)=\sigma_1(ij) \)

\[ d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]\frac{pj}{q} \]

例:51nod 1220 https://www.cnblogs.com/lokiii/p/8334216.html

7、\[ |\mu(n)|==1 \]

\[ \phi(nk)=\sum_{d|n,d|k}\phi(\frac{n}{d})\phi(k ) \]

\[ \mu(n)==0 \]

\[ s(n,m)=\frac{n*s(k,m)}{k} \]

例:bzoj 3512 https://www.cnblogs.com/lokiii/p/8330148.html

8、對於積性函數f,t為約數個數,ki為約數冪,pi為第i個約數:

\[ \sum_{d|n}f(d)=\prod_{i=1}^{t}\sum_{j=0}^{k_i}f(p_i^j) \]

9、

\[ d|ij=d|\frac{d}{gcd(i,d)} \]

10、

\[ \sum_{i=1}^{n}\phi(i^2)=\sum_{i=1}^{n}i\phi(i) \]

例:bzoj 4916 https://www.cnblogs.com/lokiii/p/8330788.html

11、對於任意積性函數構造子問題形式。這裏以mu為例,設\( f(i)=\mu(i)i^k \),\( s(n)=\sum_{i=1}^{n}f(i) \),\( g(n)=\sum_{i=1}^{n}\sum_{d|i}i^k\mu(d) \) ,對於mu,\( g(n)=\sum_{i=1}^{n}i^k \);對於phi,\( g(n)=\sum_{i=1}^{n}i^{k+1} \)

有如下推導:

\[ g(n)=\sum_{i=1}^{n}\sum_{d|i}i^k\mu(d) \]

\[ g(n)=\sum_{i=1}^{n}\sum_{d=1}^{i-1}[d|i]i^k\mu(d)+s(n) \]

\[ s(n)=g(n)-\sum_{i=1}^{n}\sum_{d=1}^{i-1}[d|i]i^k\mu(d) \]

\[ s(n)=g(n)-\sum_{j=1}^{n}j^k\sum_{d=1}^{\left \lfloor \frac{n}{j} \right \rfloor}d^k\mu(d) \]

\[ s(n)=g(n)-\sum_{j=1}^{n}j^ks(\left \lfloor \frac{n}{j} \right \rfloor) \]

例:51nod 1238 https://www.cnblogs.com/lokiii/p/8334512.html

    bzoj 4916 https://www.cnblogs.com/lokiii/p/8330788.html

12、打表找規律可得:

\[ \sum_{i=1}^{n}\sum_{j=1}^{i}[gcd(i,j)==1]ij=\sum_{i=1}^{n}i\frac{i\phi(i)+[i==1]}{2} \]

例:51nod 1238 https://www.cnblogs.com/lokiii/p/8334512.html

    51nod 1227 https://www.cnblogs.com/lokiii/p/8327746.html

13、設\( f(n)=\sum_{i=1}^{n}i \)

\[ \sum_{i=1}^{n}f(\left \lfloor \frac{n}{i} \right \rfloor) \]

\[ =\sum_{i=1}^{n}\sum_{j=1}^{\left \lfloor \frac{n}{i} \right \rfloor}j \]

\[ =\sum_{i=1}^{n}\sum_{j=1}^{\left \lfloor \frac{n}{i} \right \rfloor}j \]

\[ =\sum_{j=1}^{n}j\left \lfloor \frac{n}{j} \right \rfloor \]

例:51nod 1220 https://www.cnblogs.com/lokiii/p/8334216.html

14、

\[ \sum_{i=1}^{n}\sum_{j=1}^{n}[gcd(i,j)==1] \]

\[ 2\sum_{i=1}^{n}\phi(i)-1 \]

例:51nod 1237 https://www.cnblogs.com/lokiii/p/8320975.html

時間復雜度就不介紹了 我不會啊,據說預處理前 n^{\frac{2}{3}} +記憶化的部分復雜度可以達到 O(n^{\frac{2}{3}}) 。

結果這篇只有前面一點點是杜教篩其他都是套路啊

杜教篩