莫比乌斯反演
介绍
1、莫比乌斯反演是组合数学中很重要的内容,可以用于解决很多组合数学的问题。
2、莫比乌斯反演是数论中的重要内容,在许多情况下能够简化运算。
3、是个很神奇的东西。
引入
考虑以下求和函数
f
n
=
∑
d
|
n
g
d
那么根据定义我们可以知道
f
1
=
g
1
f
2
=
g
1
+
g
2
f
3
=
g
1
+
g
3
f
4
=
g
1
+
g
2
+
g
4
f
5
=
g
1
+
g
5
f
6
=
g
1
+
g
2
+
g
3
+
g
6
f
7
=
g
1
+
g
7
f
8
=
g
1
+
g
2
+
g
4
+
g
8
f
9
=
g
1
+
g
3
+
g
9
f
10
=
g
1
+
g
2
+
g
5
+
g
10
f
11
=
g
1
+
g
11
f
12
=
g
1
+
g
2
+
g
3
+
g
4
+
g
6
+
g
12
……
现在反过来,用
f
表示
g
。
g
1
=
f
1
g
2
=
f
2
–
f
1
g
3
=
f
3
–
f
1
g
4
=
f
4
–
f
2
g
5
=
f
5
–
f
1
g
6
=
f
6
–
f
3
–
f
2
+
f
1
g
7
=
f
7
–
f
1
g
8
=
f
8
–
f
4
g
9
=
f
9
–
f
3
g
10
=
f
10
–
f
5
–
f
2
+
f
1
g
11
=
f
11
–
f
1
g
12
=
f
12
–
f
6
–
f
4
+
f
2
……
根据上面的部分,我们发现了类似于这样的这样的式子:
g
n
=
∑
d
|
n
f
d
*
?
我们还可以发现
?
的值对于一个定值
d
,我们可以发现
n
的不同,会导致
?
的值不同,
但我们发现
?
的值与
n
d
有关系,所以我们可以把
?
看成某个当自变量为
n
d
的函数的函数值,我们设这个函数为
m
u
(
i
)
。
则原式子可以写成:
g
n
=
∑
d
|
n
f
d
*
m
u
(
n
d
)
内容
μ
d
为莫比乌斯函数,定义如下:
1、当
d
=
1
,
μ
(
d
)
=1
2、若
d
=
P
1
*
P
2
*
P
3
* …… *
P
k
,其中
P
i
(1<=i<=k)为
互异
的素数,则
μ
(
d
)
=
(
−
1
)
k
3、其余情况,
μ
(
d
)
=0
莫比乌斯反演的内容如下:
如果满足
f
n
=
∑
d
|
n
g
d
则存在
g
n
=
∑
d
|
n
f
d
*
μ
(
n
d
)
μ
函数的性质
现在给出莫比乌斯函数
μ
的两个性质。
性质1、
μ
为积性函数。
积性函数的定义为,如果
a
,
b
两数互质,就会满足
f
(
a
∗
b
)
=
f
(
a
)
*
f
(
b
)
,那我们就说这个函数为积性函数。
这个证明没什么难的,对
a
和
b
的值按照
μ
函数定义分类讨论一下就可以证出了。
性质2、对于任意正整数
n
,有
(1)若
n
=1,
∑
d
|
n
μ
(
d
)
=1
(2)若
n
>1,
∑
d
|
n
μ
(
d
)
=0
证明如下:
<1>当
n
=1时,
∑
d
|
n
μ
(
d
)
=
μ
(
1
)
=1,得证。
<2>当
n
>1时,设
d
=
P
t
1
1
*
P
t
2
2
*
P
t
3
3
*
P
t
4
4
* ….. *
P
t
k
k
当
t
i
>1时,
μ
(
d
)
=0,所以我们只讨论
t
i
=0或1 的情况。
假设
d
含有
n
的
e
个互不相同质因数,且质因数的指数为1,这样的
d
的
μ
值为
(
−
1
)
e
这样的
d
有
C
e
k
个。
则
∑
d
|
n
μ
(
d
)
=
∑
k
e
=
0
C
e
k
(
−
1
)
e
=
∑
k
e
=
0
C
e
k
(
−
1
)
e
*
1
(
k
−
e
)
根据牛顿二项式定理
(
a
+
b
)
n
=
∑
n
i
=
0
C
i
n
*
a
i
b
(
n
−
i
)
可知
∑
k
e
=
0
C
e
k
*
(
−
1
)
e
*
1
(
k
−
e
)
=
(
–
1
+
1
)
k
=0,即
∑
d
|
n
μ
(
d
)
=0,得证。
1
证明
有了
μ
函数的性质,我们就可以证出莫比乌斯反演的正确性了。
∑
d
|
n
f
d
*
μ
(
n
d
)
=
∑
d
|
n
μ
(
d
)
*
f
(
n
d
)
=
∑
d
|
n
μ
(
d
)
*
∑
i
|
n
d
g
(
i
)
交换主体,原式等价于
∑
i
|
n
g
(
i
)
*
∑
d
|
n
i
μ
(
d
)
根据
μ
函数
的
性质2
可知
(1)当
i
=
n
时,
n
i
=1,所以
∑
d
|
n
i
μ
(
d
)
=
1
,因此
g
(
i
)
的系数为1。
g
(
i
)
(2)当
i
<
n
时,
n
i
>1,所以
∑
d
|
n
i
μ
(
d
)
=
0
,因此
g
(
i
)
的系数为0。
g
(
i
)
综上所述
∑
i
|
n
f
(
i
)
*
∑
d
|
n
i
μ
(
d
)
=
g
(
i
1
)
*
0
+
g
(
i
2
)
*
0
+……+
g
(
n
)
*1=
g
(
n
)
g
(
i
2
)
g
(
n
)
即
g
n
=
∑
i
|
n
f
(
i
)
*
∑
d
|
n
i
μ
(
d
)
=
∑
d
|
n
f
d
*
μ
(
n
d
)
,得证。
μ
的求值
关于
μ
的求值可以用线性筛法求素数求得。
如果不会线性筛法可以看我写的博客,链接如下:
http://blog.csdn.net/xianhaoming/article/details/50954056
程序如下(Pascal)
for i:=1 to n do
begin
if bz[i]=false then
begin
inc(o);
s[o]:=i;
mu[i]:=true; //素数的mu值为(-1)^1=-1
end;
for j:=1 to o do
begin
bz[i*s[j]]:=true;
if (i mod s[j]=0) or (i*s[j]>n) then
begin
mu[i*s[j]]=0; //如果i mod s[j]=0 说明i*s[j]含有至少两个相同的素因子,所以mu的值为0.
break;
end;
mu[i*s[j]]:=mu[i]*mu[s[j]]; //根据mu是一个积性函数可得。(i和s[j]互质)
end;
end; //每个合数和质数都会被搜到且仅被搜到一次,故时间复杂度为O(n)
莫比乌斯反演的变形及证明
用类似的方法,我们还可以证出以下变形
如果有以下求值函数
f
(
i
)
=
∑
⌊
n
i
⌋
d
=
1
g
(
i
∗
d
)
则满足
g
(
i
)
=
∑
⌊
n
i
⌋
d
=
1
f
(
i
∗
d
)
*
μ
(
d
)
证明和原形差不了多少
∑
⌊
n
i
⌋
d
=
1
f
(
i
∗
d
)
*
μ
(
d
)
=
∑
⌊
n
i
⌋
d
=
1
μ
(
d
)
*
f
(
i
∗
d
)
=
∑
⌊
n
i
⌋
d
=
1
μ
(
d
)
*
∑
⌊
n
d
∗
i
⌋
r
=
1
g
(
r
∗
d
∗
i
)
设T=r*d
,则原式为
∑
⌊
n
i
⌋
T
=
1
g
(
T
∗
i
)
*
∑
d
|
T
μ
(
d
)
根据
μ
函数
的
性质2
可知
(1)当
T
=1时,
∑
d
|
T
μ
(
d
)
=1,因此
g
(
T
∗
i
)
的系数为1。
∑
d
|
T
(2)当
T
>1时,
∑
d
|
T
μ
(
d
)
=0,因此
g
(
T
∗
i
)
的系数为0。
∑
d
|
T
综上所述
∑
⌊
n
i
⌋
T
=
1
g
(
T
∗
i
)
*
∑
d
|
T
μ
(
d
)
=
g
(
i
∗
1
)
* 1+
g
(
i
∗
2
)
* 0+……+
g
(
i
∗
⌊
n
i
⌋
)
* 0=
g
(
i
)
即
g
(
i
)
=
∑
⌊
n
i
⌋
d
=
1
f
(
i
∗
d
)
*
μ
(
d
)
,得证。
莫比乌斯反演的应用
对于类似于莫比乌斯反演的求和函数
f
n
=
∑
d
|
n
g
d
一般我们可以用
O
1
时间求得
f
i
,但
g
i
可能要用
O
n
2
的时间去求,乃至更多。
这时我们就可以用莫比乌斯反演(或变形)得
g
n
=
∑
d
|
n
f
d
*
μ
(
n
d
)
这样用
O
n
的时间就可以求出
g
i
,而不是
O
n
2
乃至更多,大大降低了时间复杂度。