狄利克雷卷积&莫比乌斯反演
狄利克雷卷积
定义:如果函数 \(F,f,g\) 满足:
\(F(n)=\sum\limits_{d|n}f(d)g(\frac{n}{d})\)
则 \(F\) 是 \(f\) 和 \(g\) 的狄利克雷卷积,记作 \(F=(f∗g)\),或 \(F(n)=(f∗g)(n)\)
显然,狄利克雷卷积满足交换律和分配律。
常见的完全积性函数
1.常函数 \(I(n)=1\)
2.恒等函数 \(id(n)=n\)
3.单位函数 \(\varepsilon(n)=[n=1]\) 又叫单位元
性质1:
-
\(f∗ε=f\) (任何函数*单位元=本身)
-
证明:
\((f∗ε)(n)=\sum \limits_{d|n} f(d)ε(\frac{n}{d})\)
所以当且仅当 \(\varepsilon(\frac{n}{d})=1\) 时,后面式子不为 \(0\) ,即 \(d=n\) 时,所以 \((f*\varepsilon)(n)=f(n)\)
■
性质2:
-
\(μ∗I=ε\) 即 \(\sum\limits_{d|n} \mu(d) = [n==1]\)
-
证明:
当 \(n=1\) 时,\(\mu(1)=\varepsilon(1)=1\)
需要证明的是当 \(n>1\) 时,\(\sum\limits_{d|n} \mu(d) =0\)
首先将 \(n\) 进行质因数分解,即 \(n=p_1^{a_1}*p_2^{a_2}....*p_n^{a^n}\)
因为当且仅当 \(n\) 中质因数的幂次都为 \(1\) 时,\(\mu(n)\) 才有值,所以我们不妨直接将指数去掉变为 \(n=p_1*p_2...p_n\) ,此时问题就变为了在 \(n\) 个质数中选 \(k\) 个的方案数再*上对应的权值,用式子表示出来就是:
\[\sum\limits_{d|n} \mu(d)=\sum\limits_{k=0}^{n} C_n^k (-1)^k=\sum\limits_{k=0}^n C_n^k(-1)^k(1^{n-k}) \]因为二项式定理:
\[(a+b)^n=\sum\limits_{k=0}^n C_n^k a^k b^{n-k} \]所以
\[\sum\limits_{k=0}^n C_n^k(-1)^k(1^{n-k})=((-1)+1)^n=0 \]■
性质3:
-
\(\varphi*I=id\) 即 \(\sum\limits_{d|n} \varphi(d)=n\)
-
证明:
\[n=\sum\limits_{i|n}\sum\limits_{j=1}^n [gcd(j,n)=i] \\ =\sum\limits_{i|n}\sum\limits_{j=1}^{\frac{n}{i}}[\gcd(j,\frac{n}{i})=1] \\ =\sum\limits_{i|n}\varphi(\frac{n}{i})=\sum\limits_{i|n}\varphi(i) \]第一步转化是等价于将 \(n\) 个数按照 \(\gcd\) 分类,个数和为 \(n\) 。第二步是因为 \(\gcd(kx,ky)=k\),所以 \(\gcd(x,y)\) 于是可以把这个 \(k\) 除出去。
■
性质4:
\(\mu*id=\varphi\) 即 \(\varphi(n)=\sum\limits_{d|n} \mu(d)*(n/d)\)
其实这个直接用卷积代换就可以证明了:
-
证明:
由之前的性质可以知道:\(\mu*I=\varepsilon , \ \ id=\varphi*I\)
所以可以推出:\(\mu*id=\mu*\varphi*I=(\mu*I)*\varphi=\varepsilon*\varphi=\varphi\)
■
性质5:
\(d=I*I\)
-
证明:
直接定义拆开:\(d(n)=\sum\limits_{d|n} 1\)
就是约数的定义了呀。
■
性质6
\(\sigma=I*id\)
-
证明
老定义证明了。。\(\sigma(n)=\sum\limits_{d|n} 1*id(d)\)
显然。
■
性质7
\(\mu*d=I\)
还是直接卷积代换吧:
-
证明:
\(d=I*I\)
\(\mu*d=\mu*I*I=(\mu*I)*I=\varepsilon*I=I\)
■
上面的证明大部分都是照着这位大佬的博客打的,如果讲的不清楚可以看一看,写的很好!
上面性质的汇总:
\(d=I*I\)
\(\sigma=I*id\)
\(\mu*id=\varphi\)
\(\varphi*I=id\)
\(μ∗I=ε\)
\(f∗ε=f\)
莫比乌斯反演
听过许多次也考了好几次了,被教练叫过来学了。
首先一切的一切,得从莫比乌斯函数讲起:
定义函数 \(\mu(x)\) (莫比乌斯函数)。
\(\mu(x)\) 只有 \(3\) 种取值,\(-1,0,1\) 分别表示:
\(-1\) : \(x\) 的质因子的最高幂次为 \(1\) ,并且有奇数个质因子。
\(0\) : \(x\) 的质因子的最高幂次 \(\geq1\)
\(1\) : \(x\) 的质因子的最高幂次为 \(1\) ,并且有偶数个质因子。
简单来说就是:当 \(x\) 的质因子最高幂次为 \(1\) 时,\(\mu(x)=(-1)^k\) ,\(k\) 表示质因子个数。
否则 \(\mu(x)=0\)
并且规定 \(\mu(1)=1\)
关于容斥系数:
其实如果你懂欧拉函数(\(\phi(x)\))容斥的推导过程:
即:\(\varphi(n) = n(1-\frac{1}{p_1}-\frac{1}{p_2}-\cdots+\frac{1}{p_1p_2}+\frac{1}{p_1p_3}+···+\frac{1}{p_{m-2}p_{m-1}}-\frac{1}{p_1p_2p_3}-···)\)
你会发现:当分母有奇数个质数的时候,前面的符号为 \(-\) ,偶数个质数的时候,符号为 \(+\) 。(虽然刚刚好与莫比乌斯函数的取值相反)
但是你也可以大概懂得为什么莫比乌斯函数被叫做容斥系数,许多时候计算关于因数的一些东西的时候,莫比乌斯函数就可以让容斥变得简单许多。
莫比乌斯函数的一些小性质:
借用别的大佬的一段话:
首先,我们可以先明确一点,莫比乌斯函数并不是什么很高大上的东西,它其实只是一个由容斥系数所构成的函数。
1. 是个积性函数
这一点感性理解就好了,也是 \(\mu(x)\) 可以线性筛 \(\Theta(n)\) 求的基础。
2.联系欧拉函数
对于任意的正整数 \(n\) ,\(\sum\limits_{d|n} \frac{\mu(d)}{d}=\frac{\varphi(n)}{n}\)
很常用的一个性质
对于任意的正整数 \(n\) :\(\sum\limits_{d|n} \mu(d) = [n==1]\) 这个下面的许多推导都会用到。证明见狄利克雷卷积性质 2。
线性筛莫比乌斯函数:
直接给出代码好了,毕竟挺好理解的。
inline void Init_mu(int lim){
mu[1]=1;
for(register int i=2;i<=lim;++i){
if(!isprime[i]) prime[++tot]=i,mu[i]=-1;
for(register int j=1;j<=tot&&prime[j]*i<=lim;++j){
isprime[i*prime[j]]=true;
if(i%prime[j]==0) break;
else mu[i*prime[j]]=-mu[i];
}
}
return;
}
莫比乌斯反演
-
定义两个函数 \(g(n)\) 和 \(f(n)\)
莫比乌斯反演的因数形式
-
莫比乌斯反演定理:对于这两个定义在非负整数几何上的两个函数并且满足:
\[g(n)=\sum_{d|n} f(d) \]则:
\[f(n)=\sum_{d|n} \mu(d) g(\frac{n}{d}) \] -
证明:(先展示不用卷积的证明方法)
1.将 \(f(n)\) 拆开
2.因为 \(d\) 和 \(\frac{n}{d}\) 是成对出现的,这个式子还可以变为:
3.因为上面 \(\sum_{d|n} \mu(d) = [n==1]\) 所以当且仅当\(\frac{n}{k}==1\) 时,才会用值,即\(k==n\) 时,所以
最后给出整个过程:
■
当然还可以用狄利克雷卷积更轻松地证明:
-
证明:
给出的条件即 \(g=I*f\)
证明的为 \(f=\mu*g\)
因为 \(f*\varepsilon=f=\mu*g\)
又因为 \(\mu*I=\varepsilon\)
所以 \(f*\mu*I=\mu*g\)
同时消去 \(\mu\) 即 \(f*I=g\)
■
另外一种形式(莫比乌斯反演的倍数形式):
- 还是两个函数 \(g(n)\) 与 \(f(n)\)
如果
简单说就是倍数之和。
则:
下面是照搬 OIwiki 上面的证明:
做的一些题目:
「雅礼day2」最大公约数gcd
题目大意:
有 \(n\) 个正整数 \(x_1…x_n\) ,初始时状态均为未选。有 \(m\) 个操作,每个操作给定一个编号 \(i\) ,将\(x_i\) 的选取状态取反。每次操作后,你需要求出选取的数中有多少个互质的无序数对。\(n \leq 10^5 \ \ m\leq 10^5 \ \ x_i\leq10^5\)
做题的初始思路:
每次求完因数过后的 bitset
求并,但是这样的复杂度肯定是爆炸的。
所以我们只考虑每次插入和删除所带来的贡献:
所以设插入的元素为 \(t\) ,每次带来的贡献就是下式:
察觉到,后面的Sigma实质上就是有当前因子 \(d\) 的 \(a_i\) 的个数,所以每次维护一个因数的集合大小就可以了。
P2257 YY的GCD
神犇 YY 虐完数论后给傻× kAc 出了一题
给定 \(N, M\),求 \(1 \leq x \leq N\),\(1 \leq y \leq M\) 且 \(\gcd(x, y)\) 为质数的 \((x, y)\) 有多少对。
直接开始推式子:
题目要求的式子:
设 \(g(d)\) 为 \(\gcd(i,j)=d\) 的个数,\(f(d)\) 为 \(\gcd(i,j)=d\) 或 \(d\) 的倍数的个数,用式子表示以下就是:
这个式子就是上面莫比乌斯反演的另一种形式,于是:
答案要求的式子可以变成:
换一种形式表达上面的式子,也就是枚举倍数再看质因数:
后面的Sigma可以先线性筛处理 \(\mu(i)\) 然后 \(\Theta(n\log\log n)\) 处理和得出(类似埃氏筛)。然后合在一起的Sigma前半部分整除分块后半部分前缀和统计就好了。
P6810 「MCOI-02」Convex Hull 凸包
计算 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^m d(i)*d(j)*d(\gcd(i,j))\)
首先经典的将枚举的换为 \(\gcd\) ,式子就变为:
再将 \(d\) 除出去。
然后将 \([\gcd(i,j)]\) 代换掉。
然后再交换枚举顺序,先枚举 \(t\)
右边可以再除一个 \(t\):
不妨将 \(dt\) 换成 \(x\)
可以把 \(d(d)\) 丢进下一个Sigma,在变为枚举 \(x\) :
因为 \(d*\mu=I\) (这点可以见上面的性质 \(7\))
所以整个式子直接变为:
后面的两个式子可以在线性筛因子个数后 \(\Theta(n)\) 求出。
P1829 [国家集训队]Crash的数字表格 / JZPTAB
计算 \(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m} {lcm(i,j)}\)
解释见下文,先直接写式子:
①:是根据 \(lcm\) 的定义转换的。
②:交换枚举顺序。
③:将枚举的 \(\gcd\) 提出,右边实际上是除的 \(d^2\) 所以要乘一个 \(d\)
④:把 \(d\) 提出去
⑤:将 \([gcd(i,j)==1]\) 用莫反转换为 $\sum\limits_{k|\gcd(i,j)} \mu(k) $
⑥:在转换枚举顺序,将 \(k\) 提前。
⑦:让他们都乘一个 \(k\) ,也就是强制拥有一个 \(k\) 的因数,这样就可以直接省去一个判断 \(k|\gcd(i,j)\) 的条件
⑧:将 \(k^2\) 提出,预处理出 \(\mu(k)*k^2\) 的前缀和后二次整除分块可以求出答案。
复杂度:\(\Theta(n^{\frac{3}{4}})\)
CF900D Unusual Sequences
求解 \(\gcd=x\) 和为 \(y\) 的数列有多少种
首先,当 \(x \nmid y\) 时,是无解的。
所以不妨将当前的所有数都除 \(x\) ,问题也就转化为了给定和为 \(\frac{y}{x}\) ,所有数的 \(\gcd=1\) 的方案总数。
姑且先不考虑 \(\gcd=1\) 的条件:
设 \(g(x)\) 为若干个正整数和为 \(x\) 方案数:
用隔板法+二项式反演 很容易得出:$g(x)=\sum\limits_{i=1}^x \dbinom{x-1}{i-1}=\sum\limits_{i=1}^x \dbinom{x-1}{i-1} 1^{i-1} *1{x-i}=2 $
那么加上 \(\gcd=1\) 的条件。
设 \(f(x)\) 为若干个数和为 \(x\) ,它们的 \(\gcd=1\) 的方案数。
显然:\(g(x)=\sum\limits_{d|x} f(d)\) (也就是每一种正整数解都可以由它的最简形式(即 \(\gcd=1\) 的形式)扩大若干倍转化过来。
根据莫比乌斯反演的因数形式可以得到:
\(f(x)=\sum\limits_{d|x} \mu(\frac{x}{d}) g(x)\)
这个式子,因为 \(x\) 为 \(10^9\) 级别的,无法用线性筛快速求解 \(\mu\) 函数,那么就直接 \(\sqrt{x}\) 直接定义法求得了,但是时间卡得比较紧,可以再加一个线性筛只用质数,这样复杂度就是\(\Theta(\frac{\sqrt{x}}{\log x})\),\(g(x)\) 也珂以通过快速幂快速求得。
总体复杂度应该是 \(\Theta(\sqrt{m}*(\frac{\sqrt{m}}{\log m}+\log m))=\Theta(\frac{m}{\log m}+\sqrt{m}\log m)\) CF神机上应该是稳稳跑过得。
(注意 \(\mu(x)\) 为负数时的处理)