参考:OI-Wike 莫比乌斯反演
前置芝士
引理1
引理1:∀a,b,c∈Z,⌊bca⌋=⌊c⌊ba⌋⌋。
证明: 令 ba=⌊ba⌋+r1,0⩽r1<1,
带余数除法:⌊ba⌋=q⋅c+r2=⌊c⌊ba⌋⌋⋅c+r2,0⩽r2⩽c−1,
则有:
⌊bca⌋=⌊c⌊ba⌋+cr1⌋=⌊q+cr1+r2⌋=q+⌊cr1+r2⌋
由于:0=cr1+r2<c1+c−1=1,
则 ⌊bca⌋=q=⌊c⌊ba⌋⌋。
QED
引理2
引理2:∀n∈Z>0,∣∣∣{⌊dn⌋:d∈Z>0,d⩽n}∣∣∣⩽⌊2n⌋,∣V∣ 代表集合 V 中的元素个数。
证明:
-
当 d⩽⌊n⌋ 时,⌊dn⌋ 有 d⩽⌊n⌋ 种取值。
-
当 d>⌊n⌋ 时,⌊dn⌋ 有 ⌊dn⌋⩽⌊n⌋ 种取值。
综上,⌊dn⌋ 总取值不会超过 2⌊n⌋ 种。
QED
数论分块
一般用于求解 ∑i=1n⌊in⌋,有关 ⌊in⌋ 的求和式。
我们想把求和式转换为计数方法快速求出:
i=1∑n⌊in⌋=d=⌊in⌋∑d⋅f(d)
其中:f(d)=d=⌊in⌋∑1=∑i=1n[⌊in⌋=d],“[bool条件]
” 表示如果内部布尔条件成立则为1,否则为0。
由引理2知,d 的取值只有 2⌊n⌋ 种,所以只需求出 f(d) 即可。
命题3(数论分块):设 n∈Z>0,∀i⩽n,则 max{j:⌊jn⌋=⌊in⌋}=⌊⌊in⌋n⌋
证明: 令 k=⌊in⌋, 设 ⌊jn⌋=k,则:
⌊jn⌋=k⟺k⩽jn<k+1⟺k+11<nj⩽k1⟺k+1n<j⩽kn
由于 j∈Z>0,则 jmax=⌊kn⌋。
QED
参考代码:
可以发现,满足 ⌊in⌋ 具有相同取值的 i,是在一个连续区间 [imin,⌊⌊in⌋n⌋],又由于这样的区间至多只有 2⌊n⌋ 个,所以称之为数论分块(可能吧,我猜的)。
总复杂度 O(n)
类似的,单变量的多维形式同样也可以使用数论分块,如:
i=1∑min{n,m}⌊in⌋⌊im⌋
积性函数
定义
-
积性函数:f(x) 为积性函数 ⟺∀x,y∈Z>0,gcd(x,y)=1⇒f(xy)=f(x)f(y)。
-
完全积性函数:f(x) 为完全积性函数 ⟺∀x,y∈Z>0⇒f(xy)=f(x)f(y)。
不难发现积性函数一定满足:f(1)=1。
性质
令 f(x),g(x) 都是积性函数,则进入如下的变换后的函数仍是积性函数:
h(x)h(x)h(x)h(x)=f(xn)=fn(x)=f(x)g(x)=d∣x∑f(d)g(dx)
其中,第四个称为Dirichlet卷积,证明见下文 Dirichlet卷积。
设 x=p1α1p2α2⋯psαs,
则 f(x)=f(p1α1)f(p2α2)⋯f(psαs),说明积性函数可以将一般问题转换为研究素数次幂的问题。
例子
如下的一些函数都是积性函数:
-
单位函数:ε(n)=[n=1]=δn,1 (完全积性函数)
-
恒等函数:Idk(n)=nk,记 Id1(n)=Id(n)=n (完全积性函数)
-
常数函数:1(n)=1 (完全积性函数)
-
除数函数:σk(n)=∑d∣ndk,记 σ0(n)=τ(n)或d(n)=∑d∣n1(因数个数函数)
σ1(n)=σ(n)=∑d∣nd(因数和函数)
-
Euler函数:φ(n)=∑i=1n[gcd(i,n)=1]
-
Mobius函数:μ(n)=⎩⎪⎪⎨⎪⎪⎧1,(−1)r,0,n=1;m为r个两两互异的素数之积;otherwise.
除数函数是积性函数,可以是因为 σk(n)=Idk∗1,通过Dirichlet卷积得证,Dirichlet卷积部分见下文。
Euler函数是积性函数,可以通过简化剩余系的构造证明,也可以从计算式上证明。
Mobius函数是积性函数的证明,见下文 Mobius函数。
Dirichlet 卷积
定义
对于两个数论函数(Z>0→C) f(x),g(x),定义它们的Dirichlet卷积为:
h(x)=d∣x∑f(d)g(dx)=ab=x∑f(a)g(b)
上式简记为:
h=f∗g
狄利克雷卷积是数论函数的重要运算,数论函数的许多性质都是通过这个运算挖掘出来的。(from OI Wike)
性质
交换律
f∗g=g∗f
该证明比较显然,略去。
结合律
(f∗g)∗h=f∗(g∗h)
证明:
((f∗g)∗h)(n)=xc=n∑(f∗g)(x)⋅h(c)=xc=n∑ab=x∑f(a)g(b)h(c)=abc=n∑f(a)g(b)h(c)=abc=n∑f(c)g(a)h(b)=xc=n∑f(c)ab=x∑g(a)h(b)=xc=n∑f(c)(g∗h)(x)=(f∗(g∗h))(n)□
分配律
(f+g)∗h=f∗h+g∗h
证明:
((f+g)∗h)(n)=xy=n∑(f+g)(x)⋅h(y)=xy=n∑(f(x)+g(x))⋅h(y)=xy=n∑(f(x)h(y)+g(x)h(y))=xy=n∑f(x)h(y)+xy=n∑g(x)h(y)=f∗h+g∗h□
判断数论函数相等
命题1:设 f,g 为两个数论函数,则 f=g⟺∀h为数论函数且h(1)=0, f∗h=g∗h。
证明: “⇒” 显然。
“⇐”:
反设,f=g,则不妨令 x 为最小的满足 f(x)=g(x) 的正整数。
设 r=f∗h−g∗h=(f−g)∗h,则:
r(x)=(f(x)−g(x))∗h(x)=d∣x∑(f(d)−g(d))h(dx)=(f(x)−g(x))h(1)=0
故 f∗h−g∗h=0⇒f∗h=g∗h,与条件矛盾。
QED
幺元
单位函数 ε 是Dirichlet卷积的幺元。
也就是说对于任何的数论函数 f,都有 f∗ε=f。
逆元
设数论函数 f(x)=0,若存在数论函数 g(x),使得 f∗g=ε,则称 g(x) 是 f(x) 的狄利克雷逆元(下文中简称为“逆元”)。
令 x=1,则有 1=ε(1)=f(1)∗g(1)=∑ab=1f(a)g(b)=f(1)g(1)⇒g(1)=f(1)1,故 f(x) 存在逆元的一个必要条件为 f(x)=0。
逆元的唯一性: 假设 f(x) 存在两个不同的逆元 g1(x),g2(x),则有 f∗g1=ε=f∗g2,由命题1知,g1=g2,与假设矛盾,故逆元具有唯一性。
我们可以通过构造的方式给出 f(x) 的逆元:
⇒⇒ε(x)=f∗g=d∣x∑f(d)g(dx)=d∣x,d=1∑f(d)g(dx)+f(1)g(x)g(x)=f(1)ε(x)−∑d∣x,d=1f(d)g(dx)g(x)={f(1)1,−f(1)∑d∣x,d=1f(d)g(dx),x=1;otherwise.
则可以通过递归的方式求解 f(x) 的逆元。
两个积性函数的Dirichlet卷积也是积性函数
命题2:设积性函数 f(x),g(x),则 f∗g 也是积性函数。
证明: 令 h=f∗g,设 ∀x,y∈Z>0, gcd(x,y)=1,则:
h(xy)=d∣xy∑f(d)g(dxy)d1∣x,d2∣yd1d2=dd1∣x∑d2∣y∑f(d1d2)g(d1x⋅d2y)=d1∣x∑d2∣y∑(f(d1)g(d1x)⋅f(d2)g(d2y))=d1∣x∑f(d1)g(d1x)⋅d2∣y∑f(d2)g(d2y)=h(x)⋅h(y)□
积性函数的Dirichlet逆元也是积性函数
命题3:设积性函数 f(x),则 f(x) 的Dirichlet逆元 g(x) 也是积性函数。
证明: 由于 f(x) 是积性函数,所以 f(1)=1,则 g(1)=f(1)1=1。
命题等价条件为 ∀n,m∈Z>0,gcd(n,m)=1,g(nm)=g(n)g(m),下面用数学归纳法证明:
对 nm 进行归纳,当 nm=1 时,n=m=1,则 g(nm)=g(1)=1=g(1)g(1)=g(n)g(m) 命题成立。
假设对 ∀x,y∈Z>0,gcd(x,y)=1,xy<nm 有 g(xy)=g(x)g(y),
且 n,m 都不等于 1,若 n=1,则 g(nm)=g(m)=1⋅g(m)=g(n)g(m),反之亦然。
则由逆元定义式有:
g(nm)=−d∣nm,d=1∑f(d)g(dnm)=−a∣n,b∣m,ab=1∑f(ab)g(an⋅bm)由假设知−a∣n,b∣m,ab=1∑f(a)g(an)f(b)g(bm)=f(1)g(n)g(m)−a∣n∑b∣m∑f(a)g(an)f(b)g(bm)=g(n)g(m)−a∣n∑f(a)g(an)−b∣m∑f(b)g(bm)=g(n)g(m)−f∗g(n)−f∗g(m)=g(n)g(m)−ε(n)−ε(m)=g(n)g(m)
故命题成立。
综上,积性函数f 的Dirichlet逆元为积性函数。
QED
例子
下述几个例子是对Dirichlet卷积性质的应用:
d=1∗1σ=Id∗1Id=φ∗1⟺d(n)=d∣n∑1⟺σ(n)=d∣n∑d⟺n=d∣n∑φ(d)
使用Dirichlet卷积的性质证明 φ∗1=Id。
证明: 由于 φ 和 1 都是积性函数,则它们的Dirichlet卷积也是积性函数,于是命题等价证明:
∀p,c∈Z>0,p为素数,(φ∗1)(pc)=Id(pc),则:
φ∗1=d∣pc∑φ(d)=φ(1)+φ(p)+⋯+φ(pc)=1+p−1+p(p−1)+⋅+pc−1(p−1)=1+(p−1)(1+p+p2+⋯+pc−1)=1+(p−1)⋅1−p1−pc=1+pc−1=pc□
Mobius函数
定义
μ(n) 记为莫比乌斯函数,定义为:
μ(n)=⎩⎪⎪⎨⎪⎪⎧1,(−1)k,0,n=1;n为k个两两互异的素数之积;otherwise.
解释:
-
μ(1)=1
-
当 n=1 时,若 n=p1p2⋯pk,其中 pi 为两两不同的素数,则 μ(n)=(−1)k,否则 μ(n)=0
性质
命题4:Mobius函数是常数函数 1(x) 的Dirichlet逆元: μ∗1=ε⟺∑d∣xμ(d)=ε(x)。
证明:
法1: (利用Dirichlet逆元定义和积性函数的性质证明)
令 g(x) 为常数函数 1(x) 的Dirichlet逆元,由Dirichlet逆元的定义有:
g(x)={1,−∑d∣x,d=1g(dx),x=1;otherwise.
于是有:
-
g(1)=1。
-
若 x=p,则 g(p)=−g(1)=−1,又由于 g(x) 是积性函数,故 g(p1p2⋯pk)=g(p1)g(p2)⋯g(pk)=(−1)k。
-
若 x=pk,通过归纳法得:
g(p2)g(p3)…g(pk)=−(g(1)+g(p))=−(1−1)=0=−(g(1)+g(p)+g(p2))=−(1−1+0)=0=−(g(1)+g(p)+⋯+g(pk−1))=−(1−1+0+⋯+0)=0
综上,得 g(x)=μ(x)⇒μ∗1=ε
QED
法2: (利用展开式和二项式定理证明)
原命题等价证明:d∣x∑μ(d)=ε(x)。
设 x=i=1∏kpiαi,x′=i=1∏kpi
d∣x∑μ(d)=d∣x′∑μ(d)=i=0∑k(ik)(−1)i=(−1+1)k=0
综上,有 ∑d∣xμ(d)=ε(x),故原命题得证。
QED
推论5:∑d∣gcd(i,j)μ(d)=[gcd(i,j)=1]
证明: 通过命题4结论,令 x=gcd(i,j) 即可。 QED
Mobius线性筛
由于 μ 函数为积性函数,因此可以线性筛出Mobius函数(基本所有积性函数都可以通过线性筛求得)。
点击显/隐代码
Mobius反演
公式
命题6:(Mobius反演)设 f(n),g(n) 为两个数论函数。
如果有 f(n)=d∣n∑g(d),则有 g(n)=d∣n∑μ(d)f(dn)。
如果有 f(n)=n∣d∑g(d),则有 g(n)=n∣d∑μ(nd)f(d)。
证明: 第一个式子:
f(n)=d∣n∑g(d)⟺f=g∗1⟺f∗μ=g∗1∗μ=g⟺d∣n∑μ(d)f(dn)=g(n)
第二个式子:对原式使用数论变换,考虑逆推这个式子。
n∣d∑μ(nd)f(d)=k=1∑∞μ(k)f(kn)=k=1∑∞μ(k)kn∣d∑g(d)=n∣d∑g(d)k∣nd∑μ(k)=n∣d∑g(d)ε(nd)d=ng(n)□
应用
Mobius反演经常用于和 gcd 有关的题目上,配合两个技巧:提取公因式,数论分块。
其中数论分块在上文中已经介绍了,下面介绍提取公因式方法。
提取公因式
设三元数论函数 f(d,i,j),求解 ∑i=1n∑j=1m∑d∣gcd(i,j)f(d,i,j),改变求和顺序,先枚举公因数 d:
i=1∑nj=1∑md∣gcd(i,j)∑f(d,i,j)=d=1∑∞i=1∑n[d∣i]j=1∑m[d∣j]⋅f(d,i,j)i=xd,j=ydd=1∑∞xd=1∑n[d∣dx]yd=1∑m[d∣dy]⋅f(d,xd,yd)=d=1∑∞x=1∑⌊dn⌋1y=1∑⌊dm⌋1⋅f(d,xd,yd)=d=1∑min(n,m)x=1∑⌊dn⌋y=1∑⌊dm⌋f(d,xd,yd)
同理可以获得其他类似结论:
i=1∑nd∣i∑f(d,i)i=1∑nj=1∑mk=1∑ld∣gcd(i,j,k)∑f(d,i,j,k)=d=1∑nx=1∑⌊dn⌋f(d,xd)=d=1∑min(n,m,l)x=1∑⌊dn⌋y=1∑⌊dm⌋z=1∑⌊dl⌋f(d,xd,yd,zd)⋯
练习题
下面几个都是blog的题解链接,附有推式过程。
-
Luogu P2522 [HAOI2011]Problem b
-
Luogu P2398 GCD SUM
-
SPOJ 5971 LCMSUM - LCM Sum
-
Luogu P1829 [国家集训队]Crash的数字表格 / JZPTAB
-
Luogu P3327 [SDOI2015]约数个数和
-
Luogu P5176 公约数