莫比烏斯反演與杜教篩

侵刪
如下內容均來自TA爺課件,我只是改了幾個小的地方qwq
請關閉瀏覽器的極速模式後閱讀(極速模式顯示的公式爲何辣麼粗糙啊qwq)數組

枚舉除法

  1. \(\left\lfloor\frac{n}{i}\right\rfloor\)只有\(O\left(\sqrt{n}\right)\)種取值。
  2. 對於\(i\)\(\left\lfloor\frac{n}{\left\lfloor\frac{n}{i}\right\rfloor}\right\rfloor\)是與\(i\)\(n\)除並下取整取值相同的一段區間的右端點。
  3. 一個頗有用的性質:\(\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\)
  4. 上取整也有3所述的性質。

積性函數

  1. \(f(ab)=f(a)f(b),(a,b)=1\)
  2. 徹底積性:不要求\((a,b)=1\)
  3. 考慮時通常會考慮成\(f(x)=\prod\limits_{i}f\left(p_i^{k_i}\right)\)
  4. \(f\)不是0的常值函數時,\(f(1)=1\)
  5. 積性函數的狄利克雷前綴和也是積性函數。
    \[s(n)=\sum\limits_{d|n}f(d)=\prod\limits_{i}\sum\limits_{j=0}^{k_i}f\left(p_i^j\right)\]
  6. 兩個積性函數的狄利克雷卷積也是積性函數。
    \[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)\]
  7. 積性函數能夠線性篩出。線篩能夠找到每一個數\(x\)的最小質因子\(p_1\)及其次數\(k_1\)。若是咱們能以較小的代價(\(O(1)\))求出\(f\left(p_1^{k_1}\right)\),即可以線篩了。

初等積性函數\(\mu\)

  1. 栗子:給定\(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\)顯然是一個積性函數。
  2. \[\sum\limits_{d|n}\mu(d)=\left\{\begin{array}{rcl}1&,&n=1\\0&,&n\neq1\end{array}\right.\]
  3. 莫比烏斯反演
    \[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)\]
  4. 回到栗子:
    \[\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\)

  1. \(\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\)是一個積性函數。
  2. 從剛纔的式子能夠看出,\(\varphi\)徹底能夠用\(\mu\)代替,那麼咱們爲何須要\(\varphi\)呢?
    很大一部分緣由是它定義比較直觀,比較容易想到。
  3. \(\varphi\)的性質:\[\sum\limits_{d|n}\varphi(d)=\sum\limits_{d|n}d\sum\limits_{g|\frac{n}{d}}\mu(g)=n\]
  4. 栗子:求\(\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\]

杜教篩

  1. \(\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)\)
  2. 回到栗子:這樣的話最初的栗子就會作了吧~
    \[\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)\),因此能夠和普通的枚舉除法完美契合。
  3. 那麼怎麼求\(\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)\]

下面講些題吧~(不必定都是反演哦)

  1. \(\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化成帶下取整的式子;通常來說前者每每易於預處理,能夠應付多組詢問,後者則在單次詢問中有優秀表現。
  2. 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)\)
  3. 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)\)
  4. 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)\)
  5. 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)\)
相關文章
相關標籤/搜索