[数论]莫比乌斯反演入门

对莫比乌斯反演常用技巧与性质的理解与部分证明

寒假的时候雍老师就跟我们讲了,可惜当时是真的傻逼,雍老师讲的辣么详细都听不懂。。。考试全靠背公式,打暴力。这次才算是把寒假的坑填了大半,虽然我现在还是很菜。。。

前置知识

线筛五连:
(1)线筛素数
(2)线筛欧拉函数
(3)线筛莫比乌斯函数
(4)线筛约数个数
(5)线筛约数和

对上述函数的定义与暴力求解(在上面的链接里均有提到)有一定了解,如果不甚了解,欢迎点击上面的链接,仍有不清楚的地方可自行百度。

对和号 (本质是枚举)有一定认识,熟悉表达式中的表述(如 gcd g c d ,下取整符号,整除符号)以及上述函数的基本性质(更深的内容会在本博客介绍并给出部分证明)。

怎么样,是不是门槛很低,接下来我们进入正题。

接下来的举例大多来自于博主做过的例题,可以到博主的博客首页查看

常用的技巧

1.求和运算式中的位置变换

显然,当一个多项式中的所有项都与前面的一些和号的枚举值无关的话,我们就可以把这个多项式提前:

i=1nj=1mμ(i)=i=1nμ(i)j=1m ∑ i = 1 n ∑ j = 1 m μ ( i ) = ∑ i = 1 n μ ( i ) ∑ j = 1 m

我们经常在更该枚举项后,交换这些枚举项的位置。

2.更改枚举项

总的来说是一种更改求和的限制条件的方法,也是很多变形的本质。

在初始的式子里,枚举项经常有一些奇奇怪怪的限制,如下:

i=1nj=1md|gcd(i,j)μ(d) ∑ i = 1 n ∑ j = 1 m ∑ d | g c d ( i , j ) μ ( d )

我们不妨直接枚举 d d ,把限制扔到后面去,去掉限制后,由技巧1, μ ( d ) 也可以提到前面了:

d=1min(n,m)μ(d)i=1nj=1m[d|gcd(i,j)] ∑ d = 1 m i n ( n , m ) μ ( d ) ∑ i = 1 n ∑ j = 1 m [ d | g c d ( i , j ) ]

但是限制貌似仍然没有消掉???我们仍可以再次更该枚举项,对于 d d ,我们不去枚举 i , j ,因为后面的限制使 i,j i , j 必须为 d d 的倍数,所以我们不如直接枚举 d 的倍数,便成功省去了最后的限制:

d=1min(n,m)μ(d)i=1ndj=1md=d=1min(n,m)μ(d)ndmd ∑ d = 1 m i n ( n , m ) μ ( d ) ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ m d ⌋ = ∑ d = 1 m i n ( n , m ) μ ( d ) ⌊ n d ⌋ ⌊ m d ⌋

为什么上面的式子中 i,j i , j 的上限变小了?上面说到,我们直接枚举 d d 的倍数,反映到式子中就变成了枚举系数,即原来的 i 变成了 i×d i × d j j 变成了 j × d 。最后由于和号已经没有限制了,我们便直接将其转化为多项式。

3.下底分块

上面得到的式子是可以 O(n) O ( n ) 得到答案的,但是一般的莫比乌斯反演都有多组询问,每次都 O(n) O ( n ) 计算的话就只能乖乖 TLE T L E

观察上面的式子,发现对于一个 n n ,存在一段区间 [ l , r ] 使得 nl=nr=k ⌊ n l ⌋ = ⌊ n r ⌋ = k 且对于这个区间外的其它值 else e l s e ,均有 nelsek ⌊ n e l s e ⌋ ≠ k

这样,对于上述的一个区间 [l,r] [ l , r ] ri=lni ∑ i = l r ⌊ n i ⌋ 是一个定值,应用到上面的式子中,就可以把 [1,n] [ 1 , n ] 划分成 n n 个区间快速求解。

先给个结论,当我们已知 l l 时,有 r = n n l ,证明如下:

n=kl+x1=kr+x2l,r<k 设 n = k l + x 1 = k r + x 2 且 l , r < k

先由定义算出 r r

l = n x 1 k , r = n x 2 k

rl=x1x2k ∴ r − l = x 1 − x 2 k

r=l+x1x2k ∴ r = l + x 1 − x 2 k

x2<k,k|(x1x2) ∵ x 2 < k , k | ( x 1 − x 2 )

x1x2k=x1k ∴ x 1 − x 2 k = ⌊ x 1 k ⌋

r=l+x1k ∴ r = l + ⌊ x 1 k ⌋

再对等式右边进行变形:

nl=nr=k ∵ ⌊ n l ⌋ = ⌊ n r ⌋ = k

r=nk=l+x1k ∴ r = n k = l + ⌊ x 1 k ⌋

综上: r=nnl r = n ⌊ n l ⌋

证毕。

4.提出公因数

基本上是处理这种情况:

i=1nj=1m[gcd(i,j)=x] ∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = x ]

对于这种式子我们是不方便求解的,需要把判定条件改为 [gcd(i,j)=1] [ g c d ( i , j ) = 1 ] ,才能使用后面要讲的性质3进一步推导。那么,我们不如将 x x 当做“公因数”提出去:

i = 1 n j = 1 m [ g c d ( i , j ) = x ] = i = 1 n x j = 1 m x [ g c d ( i , j ) = 1 ]

其本质上也可以看做是一种更换枚举项的技巧,我们不去枚举 i,j i , j ,直接枚举 x x 的倍数,由于要求 g c d ( i , j ) = x ,直接枚举 x x 的倍数后就变成要求 g c d ( i , j ) = 1 了。

同样的,我们观察操作2中讲到的变形:

i=1nj=1m[d|gcd(i,j)] ∑ i = 1 n ∑ j = 1 m [ d | g c d ( i , j ) ]

也可以理解为提出了 d d ,式子变成:

i = 1 n d j = 1 m d [ 1 | g c d ( i , j ) ]

由于 [1|gcd(i,j)] [ 1 | g c d ( i , j ) ] 相当于没有,所以就变成了上面讲到的样子。

但是,对于和号后不止一个判定条件,而是有其他式子时,提公因式时没有这么简单:

i=1nj=1mij[d=gcd(i,j)] ∑ i = 1 n ∑ j = 1 m i j [ d = g c d ( i , j ) ]

提公因式的本质为缩小枚举范围,在只有判定条件的时候,对于“计数”时没有影响的,但是在有了其他式子时,其他的式子在范围缩小后值也变小了,这样“求和”得到的结果就不对了,所以我们应该像普通提公因式的操作方式,给予”补偿”:

d2i=1ndj=1mdij[1=gcd(i,j)] d 2 ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ m d ⌋ i j [ 1 = g c d ( i , j ) ]

5.对陌生函数的线性筛法讨论

线性筛要求所筛函数为积性,即对于 gcd(x,y)=1 g c d ( x , y ) = 1 ,有:

f(xy)=f(x)×f(y) f ( x y ) = f ( x ) × f ( y )

在积性的前提下,我们通常按照套路对 f(x) f ( x ) 进行讨论:

1.当 x x 为素数时;
2.当 i   m o d   p [ j ] = 0 时;
3.当 i mod p[j]0 i   m o d   p [ j ] ≠ 0 时;

如果对上面表述的含义不清楚,可以参考上方的线筛五连。

YY的GCD为例(以下内容直接摘自博主的题解):

f(T)=p|Tμ(Tp),T=i×p[j] f ( T ) = ∑ p | T μ ( T p ) , T = i × p [ j ] ,考虑线筛:

1.当 T T 本身为素数时,显然有 f ( T ) = μ ( 1 ) = 1

2.当 T T 拥有多个最小质因子(即 i   m o d   p [ j ] = 0 )时:

(1)当 i i 本身无多个相同质因子时,那么当且仅当我们枚举的素数等于 p [ j ] 时, μ(Tp) μ ( T p ) 的值不为 0 0 ,此时 p = p [ j ] , T = i × p [ j ] ,所以有 μ(Tp)=μ(i) μ ( T p ) = μ ( i )

(2)当 i i 本身就是拥有多个因子的数时,无论我们怎么枚举, μ ( T p ) 的值都为 0 0 ,此时,仍然有 μ ( T p ) = μ ( i )

3.当 T T 的最小质因子只有一个时:

此时, T 就比 i i 多了一个质因数 p [ j ] ,因为有:

f(i)=p|iμ(ip)f(T)=p|Tμ(i×p[j]p) f ( i ) = ∑ p | i μ ( i p ) f ( T ) = ∑ p | T μ ( i × p [ j ] p )

因为 i i 中没有质因数 p [ j ] ,所以有 μ(i×p[j]p)=μ(ip) μ ( i × p [ j ] p ) = − μ ( i p ) ,在此基础上, T T 还多了一个 μ ( i × p [ j ] p [ j ] ) = μ ( i ) 。可得, f(T)=f(i)+μ(i) f ( T ) = − f ( i ) + μ ( i )

综上,我们得到线筛方程:

f(T)=μ(1)μ(i)f(i)+μ(i)TPi mod p[j]=0i mod p[j]0 f ( T ) = { μ ( 1 ) T ∈ P μ ( i ) i   m o d   p [ j ] = 0 − f ( i ) + μ ( i ) i   m o d   p [ j ] ≠ 0

只要对函数的讨论清晰,一般还是没什么问题。

6.替换未知数

有些时候会见到,这种形状:

ans=Pd=1min(np,mp)μ(d)ndpmdp a n s = ∑ P ∑ d = 1 m i n ( ⌊ n p ⌋ , ⌊ m p ⌋ ) μ ( d ) ⌊ n d p ⌋ ⌊ m d p ⌋

又或者是:

ans=d=1ndd=1nμ(d)nddndd a n s = ∑ d = 1 n d ∑ d ′ = 1 n μ ( d ′ ) ⌊ n d d ′ ⌋ ⌊ n d d ′ ⌋

注意到诸如 dp,dd d p , d d ′ 的形状看起来非常不爽,不如替换掉,以上面的第二个式子为例,设 T=dd T = d d ′ ,代入:

ans=d=1nd=1nμ(Td)dnTnT a n s = ∑ d = 1 n ∑ d ′ = 1 n μ ( T d ) d ⌊ n T ⌋ ⌊ n T ⌋

再枚举 T T

a n s = T = 1 n d | T μ ( T d ) d n T n T

利用下面讲到的结论4,即可化简为:

ans=T=1nφ(T)nTnT a n s = ∑ T = 1 n φ ( T ) ⌊ n T ⌋ ⌊ n T ⌋

本质上,替换未知数也是为了方便更换枚举项。

7.对特定形状的替换

如果说上面讲到的都是“普遍”形状,在求和算式中常常用到。

那么“特定”形状就是一些具有特别长相的式子,需要识别出来加以替换以进行下一步化简,下面介绍的性质和结论都是这样一类特殊的式子。

常用的性质与结论

1.莫比乌斯函数的定义

在上面线筛莫比乌斯函数的博客中提到了莫比乌斯函数的通俗定义:
(1)莫比乌斯函数 μ(n) μ ( n ) 的定义域是 N+ N +
(2) μ(1)=1 μ ( 1 ) = 1
(3)当n存在平方因子时, μ(n)=0 μ ( n ) = 0
(4)当n是素数或奇数个不同素数之积时, μ(n)=1 μ ( n ) = − 1
(5)当n是偶数个不同素数之积时, μ(n)=1 μ ( n ) = 1

然而莫比乌斯函数的真正定义是这样的:

d|xμ(d)={ 10x=1x>1 ∑ d | x μ ( d ) = { 1 x = 1 0 x > 1

所以不如说上面的通俗定义才是莫比乌斯函数的性质,而莫比乌斯函数的真正定义是我们经常用到的一个性质。

2.莫比乌斯反演定理

对于函数 F(x),f(x) F ( x ) , f ( x ) ,如果有 F(x)=d|xf(d) F ( x ) = ∑ d | x f ( d ) ,那么就有:

f(x)=d|xμ(d)F(xd) f ( x ) = ∑ d | x μ ( d ) F ( x d )

证明如下:

直接将 F(x) F ( x ) 替换为 f(x) f ( x )

d|xμ(d)F(xd)=d|xμ(d)d|xdf(d) ∑ d | x μ ( d ) F ( x d ) = ∑ d | x μ ( d ) ∑ d ′ | x d f ( d ′ )

我们交换枚举顺序,先枚举 d d ′

d|xμ(d)d|xdf(d)=d|xf(d)d|xdμ(d) ∑ d | x μ ( d ) ∑ d ′ | x d f ( d ′ ) = ∑ d ′ | x f ( d ′ ) ∑ d | x d ′ μ ( d ′ )

由性质1,可得,当且仅当 xd=1 x d ′ = 1 x=d x = d ′ d|xdμ(d) ∑ d | x d ′ μ ( d ′ ) 的值不为 0 0 ,因此:

d | x f ( d ) d | x d μ ( d ) = f ( x )

证毕。

利用这个定理,可以设出具有上述关系的 F(x),f(x) F ( x ) , f ( x ) 进行各种骚操作,常见于各种神犇的博客。但是你在本蒟蒻的博客不会见到这种东西,博主不是很会,蒟蒻博主更习惯用更本质的莫比乌斯反演:性质3。

3.对 [gcd(i,j)=1] [ g c d ( i , j ) = 1 ] 的替换

在反演时,博主经常使用这个结论:

[gcd(i,j)=1]d|gcd(i,j)μ(d) [ g c d ( i , j ) = 1 ] ⇔ ∑ d | g c d ( i , j ) μ ( d )

证明非常简单,利用性质1,我们可以得到,当且仅当 gcd(i,j)=1 g c d ( i , j ) = 1 时, d|gcd(i,j)μ(d) ∑ d | g c d ( i , j ) μ ( d ) 的值不为 0 0

4.欧拉函数与莫比乌斯函数的互推

欧拉函数与莫比乌斯函数有奇妙的关系:

φ ( x ) = d | x μ ( x d ) d

我们考虑对欧拉函数的定义进行变形:

φ(x)=i=1x[gcd(i,x)=1] φ ( x ) = ∑ i = 1 x [ g c d ( i , x ) = 1 ]

利用性质3:

i=1x[gcd(i,x)=1]=i=1xd|gcd(i,x)μ(d) ∑ i = 1 x [ g c d ( i , x ) = 1 ] = ∑ i = 1 x ∑ d | g c d ( i , x ) μ ( d )

我们直接枚举 d d

i = 1 x d | g c d ( i , x ) μ ( d ) = d | x i = 1 x μ ( d ) [ d | g c d ( i , x ) ]

考虑直接枚举 d d 的倍数,而不是去枚举 i

d|xi=1xμ(d)[d|gcd(i,x)]=d|xi=1xdμ(d) ∑ d | x ∑ i = 1 x μ ( d ) [ d | g c d ( i , x ) ] = ∑ d | x ∑ i = 1 x d μ ( d )

因为 μ(d) μ ( d ) 只与 d d 有关,可以提前:

d | x i = 1 x d μ ( d ) = d | x μ ( d ) i = 1 x d = d | x μ ( d ) x d

对于我们枚举的 d|x d | x ,显然 xd x d d d 是等价的,所以最后化简为:

φ ( x ) = d | x μ ( x d ) d

证毕。

欧拉函数实际应用中出现频率不是很高,但在化简时若见到上述形状可以尝试进行替换。

5.约数个数函数 σ0(x) σ 0 ( x )

神奇性质如下:

σ0(nm)=x|ny|m[gcd(x,y)=1] σ 0 ( n m ) = ∑ x | n ∑ y | m [ g c d ( x , y ) = 1 ]

n=ki=1paii,m=ki=1pbii n = ∏ i = 1 k p i a i , m = ∏ i = 1 k p i b i

nm=ki=1pai+bii ∴ n m = ∏ i = 1 k p i a i + b i

σ0(nm)=ki=1(ai+bi+1) ∴ σ 0 ( n m ) = ∏ i = 1 k ( a i + b i + 1 )

对于 n,m n , m ,若前 i i 个质因子的贡献为 W ,考虑第 i+1 i + 1 个质因子对答案的贡献:

选取 pi+1 p i + 1 的方案分别为:

1.由 x x 选取,那么可以选 1 a i + 1 pi+1 p i + 1 ,方案数为 ai+1 a i + 1 个;

2.由 y y 选取,那么可以选 1 b i + 1 pi+1 p i + 1 ,方案数为 bi+1 b i + 1 个;

3.都不选,方案数为 1 1

所以选取 p i + 1 的方案数总和为 ai+1+bi+1+1 a i + 1 + b i + 1 + 1 个。

故最后的方案数为:

i=1k(ai+bi+1) ∏ i = 1 k ( a i + b i + 1 )

证毕。

后记

如果有更多的技巧与结论,博主会更新。

猜你喜欢

转载自blog.csdn.net/ShadyPi/article/details/80295368
今日推荐