狄利克雷卷积
定义:如果函数 (F,f,g) 满足:
(F(n)=sumlimits_{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=ε) 即 (sumlimits_{d|n} mu(d) = [n==1])
-
证明:
当 (n=1) 时,(mu(1)=varepsilon(1)=1)
需要证明的是当 (n>1) 时,(sumlimits_{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) 个的方案数再*上对应的权值,用式子表示出来就是:
[sumlimits_{d|n} mu(d)=sumlimits_{k=0}^{n} C_n^k (-1)^k=sumlimits_{k=0}^n C_n^k(-1)^k(1^{n-k}) ]因为二项式定理:
[(a+b)^n=sumlimits_{k=0}^n C_n^k a^k b^{n-k} ]所以
[sumlimits_{k=0}^n C_n^k(-1)^k(1^{n-k})=((-1)+1)^n=0 ]■
性质3:
-
(varphi*I=id) 即 (sumlimits_{d|n} varphi(d)=n)
-
证明:
[n=sumlimits_{i|n}sumlimits_{j=1}^n [gcd(j,n)=i] \ =sumlimits_{i|n}sumlimits_{j=1}^{frac{n}{i}}[gcd(j,frac{n}{i})=1] \ =sumlimits_{i|n}varphi(frac{n}{i})=sumlimits_{i|n}varphi(i) ]第一步转化是等价于将 (n) 个数按照 (gcd) 分类,个数和为 (n) 。第二步是因为 (gcd(kx,ky)=k),所以 (gcd(x,y)) 于是可以把这个 (k) 除出去。
■
性质4:
(mu*id=varphi) 即 (varphi(n)=sumlimits_{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)=sumlimits_{d|n} 1)
就是约数的定义了呀。
■
性质6
(sigma=I*id)
-
证明
老定义证明了。。(sigma(n)=sumlimits_{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) ,(sumlimits_{d|n} frac{mu(d)}{d}=frac{varphi(n)}{n})
很常用的一个性质
对于任意的正整数 (n) :(sumlimits_{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 mleq 10^5 x_ileq10^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(nloglog n)) 处理和得出(类似埃氏筛)。然后合在一起的Sigma前半部分整除分块后半部分前缀和统计就好了。
P6810 「MCOI-02」Convex Hull 凸包
计算 (sumlimits_{i=1}^nsumlimits_{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
计算 (sumlimits_{i=1}^{n}sumlimits_{j=1}^{m} {lcm(i,j)})
解释见下文,先直接写式子:
①:是根据 (lcm) 的定义转换的。
②:交换枚举顺序。
③:将枚举的 (gcd) 提出,右边实际上是除的 (d^2) 所以要乘一个 (d)
④:把 (d) 提出去
⑤:将 ([gcd(i,j)==1]) 用莫反转换为 $sumlimits_{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 mid y) 时,是无解的。
所以不妨将当前的所有数都除 (x) ,问题也就转化为了给定和为 (frac{y}{x}) ,所有数的 (gcd=1) 的方案总数。
姑且先不考虑 (gcd=1) 的条件:
设 (g(x)) 为若干个正整数和为 (x) 方案数:
用隔板法+二项式反演 很容易得出:$g(x)=sumlimits_{i=1}^x dbinom{x-1}{i-1}=sumlimits_{i=1}^x dbinom{x-1}{i-1} 1^{i-1} *1{x-i}=2{x-1} $
那么加上 (gcd=1) 的条件。
设 (f(x)) 为若干个数和为 (x) ,它们的 (gcd=1) 的方案数。
显然:(g(x)=sumlimits_{d|x} f(d)) (也就是每一种正整数解都可以由它的最简形式(即 (gcd=1) 的形式)扩大若干倍转化过来。
根据莫比乌斯反演的因数形式可以得到:
(f(x)=sumlimits_{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)) 为负数时的处理)