莫比乌斯反演与杜教筛 笔记

 

侵删
以下内容均来自TA爷课件,我只是改了几个小的地方qwq
如果想要博客园中这篇文章更好的阅读体验,请移步蚂蚁笔记
或者使用对LaTeX公式支持比较好的Chrome浏览器阅读(其他浏览器显示的公式为什么辣么粗糙啊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}0&,&n=1\\1&,&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)\)
 
 
 
posted @ 2017-05-15 10:50  神犇(shenben)  阅读(788)  评论(0编辑  收藏  举报