莫比乌斯反演学习笔记
式子推推推推到厌倦。。。
本文里的数论函数 f(n) 定义域均为自然数集,值域为整数集。
莫比乌斯反演(以下简称莫反)通常用来解决形如 ∑i=1n∑j=1m[gcd(i,j)=1] 的问题。
- I(n)=1
- Id(n)=n
- ϵ(n)=[n=1]
- φ(n)=∑i=1n[gcd(i,n)=1]
由于莫反和狄利克雷卷积关系并不怎么紧密,所以这里就只讲一下定义和一些基本性质。
(f∗g)(n)=d∣n∑f(d)g(dn)其中 ∗ 就表示狄利克雷卷积,(n) 表示范围,通常省略。
- 交换律:f∗g=g∗f
- 结合律:(f∗g)∗h=f∗(g∗h)
- 分配律:f∗(g+h)=f∗g+g∗h(+ 就是普通加法)
和乘法很像哈
莫比乌斯反演和 μ 函数(莫比乌斯函数)紧密相关。
μ(n)=⎩⎨⎧1(−1)质因子数量0n=1n 不含有平方数因子otherwise.- μ 是个积性函数,在 gcd(a,b)=1 时有 μ(ab)=μ(a)μ(b),这意味着我们可以用欧拉筛在线性复杂度内求出它。证明很简单。
- 核心出装:∑d∣nμ(d)=[n=1],这个结论非常常用。
证明:
我们可以把 n 分解成 ∏i=1kpici,设 n′=∏i=1kpi,那么有 ∑d∣nμ(n)=∑d∣n′μ(n)=∑i=1k(ik)⋅(−1)i,根据二项式定理,∑i=1k(ik)⋅(−1)i=[k=0],所以只有在 k=0(即 n=1)时原式为 1,其余时候都为 0。
这下子我们同时证明了 (μ∗I)(n)=ϵ(n),而 ϵ 是狄利克雷卷积的单位元,所以 μ 也可以定义为 I 函数的逆元,也就是 μ=I−1。
现在你已经学会了莫比乌斯反演了
我们钦定 a≤b,先推式子:
ans=i=1∑aj=1∑b[gcd(i,j)=d]=i=1∑aj=1∑b[d∣i][d∣j][gcd(di,dj)=1]=i=1∑⌊da⌋j=1∑⌊db⌋[gcd(i,j)=1](警觉起来)
我们发现出现了这么一个式子:[gcd(i,j)=1],结合 ∑d∣nμ(d)=[n=1],把 gcd(i,j)=1 当做 n:
ans=i=1∑⌊da⌋j=1∑⌊db⌋g∣gcd(i,j)∑μ(g)=g=1∑⌊da⌋μ(g)i=1∑⌊da⌋j=1∑⌊db⌋[g∣i][g∣j]=g=1∑⌊da⌋μ(g)i=1∑⌊gda⌋j=1∑⌊gdb⌋1=g=1∑nμ(g)⌊gda⌋⌊gdb⌋化成这样我们就可以愉快的数论分块了,复杂度 O(a+na)。其中 n 来自预处理,n 来自数论分块的查询。
钦定 n≤m,依然是推式子:
ans=i=1∑nj=1∑mlcm(i,j)=i=1∑nj=1∑mgcd(i,j)ij=d=1∑ni=1∑nj=1∑mdij[gcd(i,j)=d]=d=1∑ni=1∑nj=1∑mdij[d∣i][d∣j][gcd(di,dj)=1]=d=1∑ni=1∑⌊dn⌋j=1∑⌊dm⌋did⋅jd[gcd(i,j)=1]=d=1∑ni=1∑⌊dn⌋j=1∑⌊dm⌋ijdg∣gcd(i,j)∑μ(g)=d=1∑ndi=1∑⌊dn⌋j=1∑⌊dm⌋ijg∣gcd(i,j)∑μ(g)=d=1∑ndg=1∑⌊dn⌋μ(g)i=1∑⌊gdn⌋j=1∑⌊gdm⌋ij⋅g2=d=1∑ndg=1∑⌊dn⌋g2μ(g)i=1∑⌊gdn⌋ij=1∑⌊gdm⌋j我们发现 ∑i=1⌊gdn⌋i 和 ∑j=1⌊gdm⌋j 就是一个等差数列求和,可以 O(1) 求,而 ∑g=1⌊dn⌋g2μ(g) 可以在线性筛的时候预处理,接下来就是愉快的数论分块时间了。
其实看上面两个题,你应该已经知道大概了流程了:先把枚举 gcd,然后就会出现 [gcd(i,j)=1],直接套上核心出装,然后来一个数论分块,这道题就做完了。
你可以通过下面的好题推荐来强化。