侵刪
如下內容均來自TA爺課件,我只是改了幾個小的地方qwq
請關閉瀏覽器的極速模式後閱讀(極速模式顯示的公式爲何辣麼粗糙啊qwq)數組
枚舉除法
- \(\left\lfloor\frac{n}{i}\right\rfloor\)只有\(O\left(\sqrt{n}\right)\)種取值。
- 對於\(i\),\(\left\lfloor\frac{n}{\left\lfloor\frac{n}{i}\right\rfloor}\right\rfloor\)是與\(i\)被\(n\)除並下取整取值相同的一段區間的右端點。
- 一個頗有用的性質:\(\left\lfloor\frac{n}{ab}\right\rfloor=\left\lfloor\frac{\left\lfloor\frac{n}{a}\right\rfloor}{b}\right\rfloor=\left\lfloor\frac{\left\lfloor\frac{n}{b}\right\rfloor}{a}\right\rfloor\)
- 上取整也有3所述的性質。
積性函數
- \(f(ab)=f(a)f(b),(a,b)=1\)
- 徹底積性:不要求\((a,b)=1\)
- 考慮時通常會考慮成\(f(x)=\prod\limits_{i}f\left(p_i^{k_i}\right)\)
- 當\(f\)不是0的常值函數時,\(f(1)=1\)
- 積性函數的狄利克雷前綴和也是積性函數。
\[s(n)=\sum\limits_{d|n}f(d)=\prod\limits_{i}\sum\limits_{j=0}^{k_i}f\left(p_i^j\right)\]
- 兩個積性函數的狄利克雷卷積也是積性函數。
\[c(n)=\sum\limits_{d|n}a(d)b\left(\frac{n}{d}\right)=\prod\limits_{i}\sum\limits_{j=0}^{k_i}a\left(p_i^j\right)b\left(p_i^{k_i -j}\right)\]
- 積性函數能夠線性篩出。線篩能夠找到每一個數\(x\)的最小質因子\(p_1\)及其次數\(k_1\)。若是咱們能以較小的代價(\(O(1)\))求出\(f\left(p_1^{k_1}\right)\),即可以線篩了。
初等積性函數\(\mu\)
- 栗子:給定\(n\),\(m\),求\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[i\bot j],n,m \leqslant 10^9\),不用\(\mu\)怎麼作?
容斥!設dp數組\(f(i,j)\)爲當\(n=i,m=j\)時的答案。
\[f(n,m)=nm-\sum\limits_{i=2}^{\min(n,m)}f\left(\left\lfloor\frac{n}{i}\right\rfloor,\left\lfloor\frac{m}{i}\right\rfloor\right)\]
時間複雜度\(O\left(\sum\limits_{i=1}^{\left\lfloor\sqrt{n}\right\rfloor}\left(\sqrt{\left\lfloor\frac{n}{i}\right\rfloor}+\sqrt{i}\right)\right)=O\left(n^{\frac{3}{4}}\right)\)
那麼\(\mu\)是什麼?就是容斥係數!
\[\mu(1)=1,\mu(2)=-1,\mu(3)=-1,\mu(4)=0,\mu(5)=-1\dots\]
\[\mu(n)=\left\{\begin{array}{rcl}0&,&\exists x^2|n\\(-1)^k&,&n=\prod\limits_{i=1}^{k}p_i\end{array}\right.\]
\(\mu\)顯然是一個積性函數。
- \[\sum\limits_{d|n}\mu(d)=\left\{\begin{array}{rcl}1&,&n=1\\0&,&n\neq1\end{array}\right.\]
- 莫比烏斯反演
\[F(n) =\sum\limits_{d|n}f(d)\]
\[f(n) =\sum\limits_{d|n}F(d)\mu\left(\frac{n}{d}\right)=\sum\limits_{d|n}f(d)\sum\limits_{g|\frac{n}{d}}\mu(g)=f(n)\]
\[F(n) =\sum\limits_{n|d}f(d)\]
\[f(n) =\sum\limits_{n|d}F(d)\mu\left(\frac{d}{n}\right)=\sum\limits_{n|d}f(d)\sum\limits_{g|\frac{d}{n}}\mu(g)=f(n)\]
- 回到栗子:
\[\sum\limits_{i=1}^n\sum\limits_{j=1}^m[i\bot j]=\sum\limits_{i=1}^n\sum\limits_{j=1}^m\sum\limits_{d|(i,j)}\mu(d)=\sum\limits_{d=1}^{\min(n,m)}\mu(d)\left\lfloor\frac{n}{d}\right\rfloor\left\lfloor\frac{m}{d}\right\rfloor\]
固然這樣仍是作不了。。。
因此咱們須要杜教篩!(後面再說吧。。)
不過大多數\(\mu\)的題(第一步)這麼化,因此這個式子仍是比較重要的。
初等積性函數\(\varphi\)
- \(\varphi(n)=1~n與n互質的數的個數\)
因此由定義即可直接寫出:
\[\varphi(n)=\sum\limits_{d|n}\mu(d)\frac{n}{d}=\prod\limits_{i}\sum\limits_{j=0}^{k_i}\mu\left(p_i^j\right)p^{k_i -j}=\prod\limits_{i}p_i^{k_i -1}(p_i -1)\]
這樣就能夠線篩出來了,並且能夠看出\(\varphi\)是一個積性函數。
- 從剛纔的式子能夠看出,\(\varphi\)徹底能夠用\(\mu\)代替,那麼咱們爲何須要\(\varphi\)呢?
很大一部分緣由是它定義比較直觀,比較容易想到。
- \(\varphi\)的性質:\[\sum\limits_{d|n}\varphi(d)=\sum\limits_{d|n}d\sum\limits_{g|\frac{n}{d}}\mu(g)=n\]
- 栗子:求\(\sum\limits_{i=1}^n\sum\limits_{j=1}^m(i,j)\),多組數據,\(t,n,m\leqslant 10^5\)。
\[ans=\sum\limits_{i=1}^{\min(n,m)}\varphi(i)\left\lfloor\frac{n}{i}\right\rfloor\left\lfloor\frac{m}{i}\right\rfloor\]
杜教篩
- 求\(\sum\limits_{i=1}^n\mu(i),n\leqslant 10^{11}\)
直接求很差求,可是咱們有\(\sum\limits_{i=1}^n\sum\limits_{d|i}\mu(d)=1\)
化一下蛤:\(\sum\limits_{i=1}^n\sum\limits_{j=1}^{\left\lfloor\frac{n}{i}\right\rfloor}\mu(j)=1\),\(\sum\limits_{i=1}^n\mu(i)=1-\sum\limits_{i=2}^n\sum\limits_{j=1}^{\left\lfloor\frac{n}{i}\right\rfloor}\mu(j)\)
核心思想是枚舉約數,這樣就能夠遞推/遞歸求解了。
時間複雜度\(O\left(n^{\frac34}\right)\)。
可是注意到當\(n\)比較小的時候其實咱們能夠\(O(n)\)線篩出來。
因此咱們考慮分類討論,線篩出≤B的,>B的遞推。
時間複雜度\(O\left(B+\sum\limits_{i=1}^{\frac nB}\sqrt{\frac ni}\right)=O\left(B+\frac n{\sqrt{B}}\right)\)
求導一下可知在\(B=n^{\frac23}\)時取得最小值\(O\left(n^\frac23\right)\)。
- 回到栗子:這樣的話最初的栗子就會作了吧~
\[\sum_{i=1}^n\sum_{j=1}^m[i\bot j]=\sum_{i=1}^n\sum_{j=1}^m\sum_{d|(i,j)}\mu(d)=\sum_{d=1}^{min(n,m)}\mu(d)\left\lfloor\frac nd\right\rfloor\left\lfloor\frac md\right\rfloor\]
注意到杜教篩的時候不只是求出了\(\sum\limits_{j=1}^n\mu(j)\),還順便求出了全部的\(\sum\limits_{j=1}^{\left\lfloor\frac ni\right\rfloor}\mu(j)\),因此能夠和普通的枚舉除法完美契合。
- 那麼怎麼求\(\sum\limits_{i=1}^n\varphi(i)\)?
\[\frac{n(n+1)}2=\sum_{i=1}^n\sum_{d|i}\varphi(d)=\sum_{i=1}^n\sum_{j=1}^{\left\lfloor\frac ni\right\rfloor}\varphi(j)\]
下面講些題吧~(不必定都是反演哦)
- 求\(\sum\limits_{i=1}^n\sum\limits_{j=1}^mlcm(i,j)\),\(n,m\leq10^{11}\)
\[ \begin{aligned}&\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\\=&\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{(i,j)}\\=&\sum_{i=1}^{\min(n,m)}i\sum_{j=1}^{\min\left(\left\lfloor\frac ni\right\rfloor,\left\lfloor\frac mi\right\rfloor\right)}\mu(j)j^2\frac{\left\lfloor\frac n{ij}\right\rfloor\left(\left\lfloor\frac n{ij}\right\rfloor+1\right)}2\frac{\left\lfloor\frac m{ij}\right\rfloor\left(\left\lfloor\frac m{ij}\right\rfloor+1\right)}2\end{aligned} \]
若是咱們能夠杜教篩出\(\sum\limits_{i=1}^n\mu(i)i^2\),就能夠作到\(O\left(n^{\frac34}\right)\)。
這是能夠的
\[1=\sum_{i=1}^n\sum_{d|i}\mu(d)d^2\left(\frac id\right)^2=\sum_{i=1}^ni^2\sum_{j=1}^{\lfloor\frac ni\rfloor}\mu(j)j^2\]
可是咱們固然沒必要這麼作。
能夠直接令\(f(n,m)\)表示(1~n,1~m)中全部互質數對乘積和。
那麼\(f(n,m)=\frac{n(n+1)m(m+1)}4-\sum\limits_{i=2}^{\min(n,m)}i^2f\left(\left\lfloor\frac ni\right\rfloor,\left\lfloor\frac mi\right\rfloor\right)\),直接dp就行了。
可是咱們須要\(O\left(n^\frac 23\right)\)
\[\sum_{i=1}^{\min(n,m)}\frac{\left\lfloor\frac ni\right\rfloor\left(\left\lfloor\frac ni\right\rfloor+1\right)\left\lfloor\frac mi\right\rfloor\left(\left\lfloor\frac mi\right\rfloor+1\right)}4i\sum_{d|i}\mu(d)d\]
枚舉除法,咱們便只需求\(\sum\limits_{i=1}^ni\sum\limits_{d|i}\mu(d)d\)
它等於\(\sum\limits_{i=1}^ni\sum\limits_{j=1}^{\left\lfloor\frac ni\right\rfloor}\mu(j)j^2\)
咱們先求出\(\sum\limits_{i=1}^n\mu(i)i^2\)
這個剛纔已經講過了。
而後前者即可以預處理+直接求。
預處理的時候須要線性篩
\[\sum_{d|n}\mu(d)d=\prod_i\left(1-p_i\right)\]
這題中涉及一種很重要的杜教篩的思路。
就是對於不能直接杜教篩的式子,能夠將其與另外一個前綴和易求的積性函數狄利克雷卷積,使得卷積後的函數前綴和也易求。
好比這道題就是與\(f(x)=x^2\)卷積。
這道題也涉及到一些常見的化式子的方法。
\(\gcd\to\mu\),\(\mu\to\varphi\)
對於i,j,ij三項貢獻的這種,能夠枚舉ij將其化爲狄利克雷卷積,也能夠枚舉i和j化成帶下取整的式子;通常來說前者每每易於預處理,能夠應付多組詢問,後者則在單次詢問中有優秀表現。
- SDOI2015 約數個數和
求\(\sum\limits_{i=1}^n\sum\limits_{j=1}^md(i,j)\),多組數據,\(T,n,m\leq10^5\),\(d(i,j)=\sum\limits_{x|i}\sum\limits_{y|j}[x\bot y]\)
\[\begin{aligned}&\sum_{i=1}^n\sum_{j=1}^m\sum_{x|i}\sum_{y|j}[x\bot y]\\=&\sum_{i=1}^n\sum_{j=1}^m\left\lfloor\frac ni\right\rfloor\left\lfloor\frac mj\right\rfloor\sum_d\mu(d)[d|i][d|j]\\=&\sum_{d=1}^{\min(n,m)}\mu(d)\left(\sum_{i=1}^{\left\lfloor\frac nd\right\rfloor}\left\lfloor\frac{\left\lfloor\frac nd\right\rfloor}i\right\rfloor\right)\left(\sum_{j=1}^{\left\lfloor\frac md\right\rfloor}\left\lfloor\frac{\left\lfloor\frac md\right\rfloor}j\right\rfloor\right)\end{aligned}\]
預處理\(O\left(n\log n\right)/O\left(n\sqrt n\right)\),查詢\(O\left(T\sqrt n\right)\)
- BZOJ2820 YY的gcd
求\((x,y)=質數\),\(x\in[1,n]\),\(y\in[1,m]\)的數對個數。多組數據,\(n,m\leq10^7\),\(T\leq10^4\)
\[\begin{aligned}&\sum_{p\leq \min(n,m)}\sum_{i=1}^{\left\lfloor\frac np\right\rfloor}\sum_{j=1}^{\left\lfloor\frac mp\right\rfloor}[i\bot j]\\=&\sum_{p\leq \min(n,m)}\sum_{i=1}^{\left\lfloor\frac np\right\rfloor}\sum_{j=1}^{\left\lfloor\frac mp\right\rfloor}\sum_d\mu(d)[d\bot i][d\bot j]\\=&\sum_{i=1}^n\left\lfloor\frac ni\right\rfloor\left\lfloor\frac mi\right\rfloor\sum_{p|i}\mu\left(\frac ip\right)\end{aligned}\]
預處理\(O(n)/O(n\lg\lg n)\),查詢\(O(T\sqrt n)\)
- FZU2016 how many tuples
有m個數,第i個數的取值範圍是\([1,a_i]\),求這m個數gcd爲1的方案數。多組數據,10s時限,\(t\leq10^3\),\(m\leq20\),\(ai\leq10^8\)
\[\sum_{i=1}^{\min(a_i)(1\leq i\leq m)}\mu(i)\prod_{j=1}^m\left\lfloor\frac{a_j}i\right\rfloor\]
直接杜教篩就能夠了,杜教篩的時候預處理\(10^7\)。
枚舉除法的時候須要用堆。時間複雜度\(O\left(Tm\sqrt A\log m\right)\)
- CQOI2015 選數
求從\(\left[L,R\right]\)中選N個數,其gcd等於K的方案數。\(N,K,L,R\leq10^9\),\(R-L\leq10^5\)
若是N個數互不相同,那麼gcd至可能是R-L,因此咱們分狀況討論。
因此設\(f(i)\)表示gcd是K*i的方案數,要求\(\left\lfloor\frac R{iK}\right\rfloor-\left\lfloor\frac{L-1}{iK}\right\rfloor>1\)
\[f(i)=\left(\left\lfloor\frac R{iK}\right\rfloor-\left\lfloor\frac{L-1}{iK}\right\rfloor\right)^N-\sum_{j=2}^{\left\lfloor\frac RK\right\rfloor-1}f(ij)\]
最後再加上\([L\leq K\leq R]\)
時間複雜度\(O\left((R-L)\log K\right)\)