推荐在 cnblogs 上阅读。
莫比乌斯反演速通
前言
由于请假错过了讲课,所以莫反是我第一个需要自学的难度不小的数学知识。
自学的过程的狼狈的,旁边也曾是自学的 czn 告诉我如果学会“狄利克雷卷积”就可以对“莫比乌斯反演”的理解进行“降维打击”。他还十分热心地带着我速通了一遍狄卷与莫反。
一知半解,就自学了很多资料。终于是补全了每一块知识碎片。
秉着造福后人的原则,我想写一篇非常非常通俗易懂的学习笔记。
易懂到什么程度呢?——就是初一的同学,也能速通。
食用指南:备好草稿纸,遇到式子先自己推导,培养推式子的习惯。
数论函数
这是狄利克雷卷积(后文简称“狄卷”)的前置知识。
数论函数是一类这样的函数:定义域为正整数,值域是一个数集。
数论函数间的简单运算有加法与数乘。
- 加法:定义为两个函数逐位相加。 ( f + g ) ( n ) = f ( n ) + g ( n ) (f+g)(n)=f(n)+g(n) (f+g)(n)=f(n)+g(n)
- 数乘:定义为其函数每位都乘一个数。 ( x f ) ( n ) = x ⋅ f ( n ) (xf)(n)=x\cdot f(n) (xf)(n)=x⋅f(n)
狄利克雷卷积
狄卷是数论函数间的运算,记为:
f ∗ g = h f*g=h f∗g=h
等号左侧展开为:
f ∗ g = ∑ i ∣ n f ( i ) ⋅ g ( n i ) f*g=\sum\limits_{i|n}f(i)\cdot g(\frac{n}{i}) f∗g=i∣n∑f(i)⋅g(in)
一些运算律
交换律: f ∗ g = g ∗ f f*g=g*f f∗g=g∗f,这个显然。
结合律: ( f ∗ g ) ∗ h = f ∗ ( g ∗ h ) (f*g)*h=f*(g*h) (f∗g)∗h=f∗(g∗h),因为:
∑ i ⋅ j ⋅ k = n ( f ( i ) g ( j ) ) ⋅ h ( k ) = ∑ i ⋅ j ⋅ k = n f ( i ) ⋅ ( g ( j ) h ( k ) ) \sum\limits_{i\cdot j\cdot k=n}(f(i)g(j))\cdot h(k)=\sum\limits_{i\cdot j\cdot k=n}f(i)\cdot (g(j)h(k)) i⋅j⋅k=n∑(f(i)g(j))⋅h(k)=i⋅j⋅k=n∑f(i)⋅(g(j)h(k))
分配律: f ∗ h + g ∗ h = ( f + g ) ∗ h f*h+g*h=(f+g)*h f∗h+g∗h=(f+g)∗h,因为:
f ∗ h + g ∗ h = ∑ i ∣ n f ( i ) h ( n i ) + ∑ i ∣ n g ( i ) h ( n i ) = ∑ i ∣ n f ( i ) h ( n i ) + g ( i ) h ( n i ) = ∑ i ∣ n ( f ( i ) + g ( i ) ) ⋅ h ( n i ) = ∑ i ∣ n ( f + g ) ( i ) ⋅ h ( n i ) = ( f + g ) ∗ h \begin{aligned} f*h+g*h&=\sum\limits_{i|n}f(i)h(\frac{n}{i})+\sum\limits_{i|n}g(i)h(\frac{n}{i})\\ &=\sum\limits_{i|n} f(i)h(\frac{n}{i})+g(i)h(\frac{n}{i})\\ &=\sum\limits_{i|n} (f(i)+g(i))\cdot h(\frac{n}{i})\\ &=\sum\limits_{i|n} (f+g)(i)\cdot h(\frac{n}{i})\\ &=(f+g)*h \end{aligned} f∗h+g∗h=i∣n∑f(i)h(in)+i∣n∑g(i)h(in)=i∣n∑f(i)h(in)+g(i)h(in)=i∣n∑(f(i)+g(i))⋅h(in)=i∣n∑(f+g)(i)⋅h(in)=(f+g)∗h
一些函数意义
-
φ ( n ) \varphi(n) φ(n): [ 1 , n ] [1,n] [1,n] 中与 n n n 互质的数的个数。
性质: φ ( 1 ) = 1 \varphi(1)=1 φ(1)=1, φ ( n ) = n − 1 \varphi(n)=n-1 φ(n)=n−1 当且仅当 n n n 为质数。 -
μ ( n ) \mu(n) μ(n):莫比乌斯函数。
定义:- μ ( n ) = 1 \mu(n)=1 μ(n)=1,( n = 1 n=1 n=1)
- μ ( n ) = ( − 1 ) k \mu(n)=(-1)^k μ(n)=(−1)k,( n = ∏ i = 1 k p i n=\prod\limits _{i=1}^{k} p_i n=i=1∏kpi 且 p i p_i pi 为指数为 1 1 1 的质数)
- μ ( n ) = 0 \mu(n)=0 μ(n)=0,(其他情况)
-
I d k ( n ) Id_k(n) Idk(n):幂函数, I d k ( n ) = n k Id_k(n)=n^k Idk(n)=nk。
-
σ k ( n ) \sigma_k(n) σk(n): n n n 的所有因数的 k k k 次方和。
-
ϵ ( n ) \epsilon(n) ϵ(n):值为 [ n = 1 ] [n=1] [n=1]。即当且仅当 n = 1 n=1 n=1 时值为 1 1 1,否则为 0 0 0。
-
d ( n ) d(n) d(n): n n n 的所有因数个数,即 σ 0 ( n ) \sigma_0(n) σ0(n)。
-
I ( n ) I(n) I(n):常函数,值恒为 1 1 1,即 I d 0 ( n ) Id_0(n) Id0(n)。
这里说明一下第七条,在一些参考书中写作 1 ( n ) \mathbf{1}(n) 1(n),本文为了区分函数与常数,这里用 I ( n ) I(n) I(n) 代替 1 ( n ) \mathbf{1}(n) 1(n)。
一些式子
这里会有很多公式,可以再看证明之前自己先证一遍,难度从易到难。
式子一: ( x f ) ∗ g = x ( f ∗ g ) (xf)*g=x(f*g) (xf)∗g=x(f∗g),因为:
( x f ) ∗ g = ∑ i ∣ n ( x f ) ( i ) ⋅ g ( n i ) = ∑ i ∣ n x ⋅ f ( i ) ⋅ g ( n i ) = x ⋅ ∑ i ∣ n f ( i ) g ( n i ) = x ( f ∗ g ) \begin{aligned} (xf)*g&=\sum\limits_{i|n} (xf)(i)\cdot g(\frac{n}{i})\\ &=\sum\limits_{i|n} x\cdot f(i)\cdot g(\frac{n}{i})\\ &=x\cdot \sum\limits_{i|n} f(i)g(\frac{n}{i})\\ &=x(f*g) \end{aligned} (xf)∗g=i∣n∑(xf)(i)⋅g(in)=i∣n∑x⋅f(i)⋅g(in)=x⋅i∣n∑f(i)g(in)=x(f∗g)
式子二: f ∗ ϵ = f f*\epsilon=f f∗ϵ=f,因为:
( f ∗ ϵ ) ( n ) = ∑ i ∣ n f ( i ) ϵ ( n i ) = f ( n ) \begin{aligned} (f*\epsilon) (n)&=\sum\limits_{i|n} f(i)\epsilon(\frac{n}{i})\\ &=f(n) \end{aligned} (f∗ϵ)(n)=i∣n∑f(i)ϵ(in)=f(n)
式子三: I ∗ I = d I*I=d I∗I=d,因为:
I ∗ I = ∑ i ∣ n I ( i ) I ( n i ) = ∑ i ∣ n 1 = d \begin{aligned} I*I&=\sum\limits_{i|n} I(i)I(\frac{n}{i})\\ &=\sum\limits_{i|n} 1\\ &=d \end{aligned} I∗I=i∣n∑I(i)I(in)=i∣n∑1=d
式子四: I ∗ I d k = σ k I*Id_k=\sigma_k I∗Idk=σk,因为:
I ∗ I d k = ∑ i ∣ n I ( i ) I d k ( n i ) = ∑ i ∣ n I d k ( i ) = σ k \begin{aligned} I*Id_k&=\sum\limits_{i|n} I(i)Id_k(\frac{n}{i})\\ &=\sum\limits_{i|n} Id_k(i)\\ &=\sigma_k \end{aligned} I∗Idk=i∣n∑I(i)Idk(in)=i∣n∑Idk(i)=σk
式子五: μ ∗ I = ϵ \mu*I=\epsilon μ∗I=ϵ,因为:
μ ∗ I = ∑ i ∣ n μ ( i ) I ( n i ) = ∑ i ∣ n μ ( i ) \begin{aligned} \mu*I&=\sum\limits_{i|n} \mu(i)I(\frac{n}{i})\\ &=\sum\limits_{i|n} \mu(i) \end{aligned} μ∗I=i∣n∑μ(i)I(in)=i∣n∑μ(i)
- 当 n = 1 n=1 n=1,显然成立。
- 当
n
≠
1
n\neq 1
n=1,将
n
n
n 分解为
n
=
p
1
m
1
p
2
m
2
…
p
k
m
k
n=p_1^{m_1}p_2^{m_2}\dots p_k^{m_k}
n=p1m1p2m2…pkmk。
计算有效的 μ \mu μ,肯定质因子的指数为 1 1 1。
所以每次在 k k k 个质因数选择 r r r 个,即 C k r C_k^r Ckr 个。
那就可以继续推式子了。
∑ i ∣ n μ ( i ) = C k 0 − C k 1 + C k 2 − C k 3 + ⋯ + ( − 1 ) k C k k = ∑ i = 0 k ( − 1 ) i C k i = ( 1 − 1 ) k = 0 \begin{aligned} \sum\limits_{i|n} \mu(i)&=C_k^0-C_k^1+C_k^2-C_k^3+\dots +(-1)^kC_k^k\\ &=\sum\limits_{i=0}^k (-1)^iC_k^i\\ &=(1-1)^k=0 \end{aligned} i∣n∑μ(i)=Ck0−Ck1+Ck2−Ck3+⋯+(−1)kCkk=i=0∑k(−1)iCki=(1−1)k=0
因此, μ ∗ I = ∑ i ∣ n μ ( i ) = [ n = 1 ] = ϵ \mu *I=\sum\limits_{i|n} \mu(i)=[n=1]=\epsilon μ∗I=i∣n∑μ(i)=[n=1]=ϵ。
这里解释一下是怎么得到 ( 1 − 1 ) k (1-1)^k (1−1)k 的:
二项式定理: ( x + y ) k = ∑ i = 0 k C k i x k − i y i (x+y)^k=\sum\limits_{i=0}^k C_k^ix^{k-i}y^i (x+y)k=i=0∑kCkixk−iyi。
这里把 x = 1 x=1 x=1, y = − 1 y=-1 y=−1 带进去得证。
式子六: φ ∗ I = I d 1 \varphi*I=Id_1 φ∗I=Id1,因为:
设 p p p 为质数, m > 0 m>0 m>0,则:
( φ ∗ I ) ( p m ) = ∑ i ∣ p m φ ( p m ) = ∑ i = 0 m φ ( p i ) = p 0 + ∑ i = 1 m φ ( p i ) = p 0 + ∑ i = 1 m ( p i − p i − 1 ) = p m \begin{aligned} (\varphi*I)(p^m)&=\sum\limits_{i|p^m} \varphi(p^m)\\ &=\sum\limits_{i=0}^m \varphi(p^i)\\ &=p^0+\sum\limits_{i=1}^m \varphi(p^i)\\ &=p^0+\sum\limits_{i=1}^m (p^i-p^{i-1})\\ &=p^m \end{aligned} (φ∗I)(pm)=i∣pm∑φ(pm)=i=0∑mφ(pi)=p0+i=1∑mφ(pi)=p0+i=1∑m(pi−pi−1)=pm
因为 n n n 可分解为 p 1 m 1 p 2 m 2 … p k m k p_1^{m_1}p_2^{m_2}\dots p_k^{m_k} p1m1p2m2…pkmk,可由积性函数的性质得证 ( φ ∗ I ) ( n ) = n = I d 1 ( n ) (\varphi*I)(n)=n=Id_1(n) (φ∗I)(n)=n=Id1(n)。
即 φ ∗ I = I d 1 \varphi*I=Id_1 φ∗I=Id1。
式子七: φ = μ ∗ I d 1 \varphi=\mu*Id_1 φ=μ∗Id1。
这个留作作业,答案放在文尾。
简单性质
上文的式子二、四、六就是主要性质,除此之外还有积性函数性质:
若 f f f, g g g 为积性函数,则 f ∗ g f*g f∗g 也为积性函数。
狄利克雷的逆元
对于每个 f ( 1 ) ≠ 0 f(1)\ne 0 f(1)=0 的 f f f,都存在一个 g g g 使得 f ∗ g = ϵ f*g=\epsilon f∗g=ϵ。
如何求 g g g?
先推一下式子:
f ∗ g = ∑ i ∣ n f ( i ) g ( n i ) = f ( 1 ) g ( n ) + ∑ i ∣ n , i ≠ 1 f ( i ) g ( n i ) = ϵ = [ n = 1 ] \begin{aligned} f*g&=\sum\limits_{i|n} f(i)g(\frac{n}{i})\\ &=f(1)g(n)+\sum\limits_{i|n,i\ne 1}f(i)g(\frac{n}{i})\\ &=\epsilon=[n=1] \end{aligned} f∗g=i∣n∑f(i)g(in)=f(1)g(n)+i∣n,i=1∑f(i)g(in)=ϵ=[n=1]
现在目标为定义 g ( n ) g(n) g(n) 使得等式成立。
可以定义: g ( n ) = 1 f ( 1 ) ( [ n = 1 ] − ∑ i ∣ n , i ≠ 1 f ( i ) g ( n i ) ) g(n)=\frac{1}{f(1)}([n=1]-\sum\limits_{i|n,i\ne 1}f(i)g(\frac{n}{i})) g(n)=f(1)1([n=1]−i∣n,i=1∑f(i)g(in))。
g g g 就是 f f f 的逆元,也可写作 f − 1 f^{-1} f−1。
莫比乌斯反演
莫比乌斯反演公式
在“狄卷”的“一些函数意义”中我们直接给出了 μ \mu μ 的定义与运算方式。
但其实是要推的,仅知道的条件是“定义 I I I 的逆为 μ \mu μ”。
让我们来看看如何用狄卷推出莫反的式子——看看狄卷是怎么降维打击的。
如果 g = f ∗ I g=f*I g=f∗I,则
f = f ∗ I ∗ μ = g ∗ μ f=f*I*\mu=g*\mu f=f∗I∗μ=g∗μ
一展开,即:
如果 g ( n ) = ∑ i ∣ n f ( i ) g(n)=\sum\limits_{i|n}f(i) g(n)=i∣n∑f(i),则
f ( i ) = ∑ i ∣ n μ ( i ) g ( n i ) f(i)=\sum\limits_{i|n}\mu(i)g(\frac{n}{i}) f(i)=i∣n∑μ(i)g(in)
写得优美一点:
g ( n ) = ∑ i ∣ n f ( i ) ⇔ f ( i ) = ∑ i ∣ n μ ( i ) g ( n i ) g(n)=\sum\limits_{i|n}f(i)\Leftrightarrow f(i)=\sum\limits_{i|n}\mu(i)g(\frac{n}{i}) g(n)=i∣n∑f(i)⇔f(i)=i∣n∑μ(i)g(in)
而这个就是我们的莫反公式了!
别忘了,我们尚未知道 μ \mu μ 的值,现在来讲讲怎么求。
由于 I I I 是积性函数,所以 μ \mu μ 也是积性函数。简单算数可得:
μ ( p k ) = { 1 k = 0 − 1 k = 1 0 k > 1 \mu(p^k)=\begin{cases} 1 & k=0\\ -1 & k=1\\ 0 & k>1 \end{cases} μ(pk)=⎩ ⎨ ⎧1−10k=0k=1k>1
再根据积性函数,就得到了:
μ ( n ) = { 1 n = 1 ( − 1 ) k n = p 1 p 2 … p k 0 other situation \mu(n)=\begin{cases} 1 & n=1\\ (-1)^k & n=p_1p_2\dots p_k\\ 0 & \text{other\ situation} \end{cases} μ(n)=⎩ ⎨ ⎧1(−1)k0n=1n=p1p2…pkother situation
于是华丽结束。
有没有体味到降维打击呀朋友们!
莫比乌斯函数的性质
如果不讲狄卷,这里应该是第二章,但是学过狄卷的我们可以速通以下三个性质。
- ∑ i ∣ n μ ( i ) = [ n = 1 ] \sum\limits_{i|n}\mu(i)=[n=1] i∣n∑μ(i)=[n=1]。这个用 μ ∗ I = ϵ \mu*I=\epsilon μ∗I=ϵ 秒了。
- n = ∑ i ∣ n φ ( i ) n=\sum\limits_{i|n}\varphi(i) n=i∣n∑φ(i)。用 φ ∗ I = I d 1 \varphi*I=Id_1 φ∗I=Id1 秒了。
-
∑
i
∣
n
μ
(
i
)
i
=
φ
(
n
)
n
\sum\limits_{i|n}\frac{\mu(i)}{i} = \frac{\varphi(n)}{n}
i∣n∑iμ(i)=nφ(n)。因为
φ
=
μ
∗
I
d
1
\varphi=\mu*Id_1
φ=μ∗Id1,所以展开得
∑ i ∣ n μ ( i ) ⋅ n i = φ ( n ) ⇒ ∑ i ∣ n μ ( i ) i = φ ( n ) n \sum\limits_{i|n} \frac{\mu(i)\cdot n}{i}=\varphi(n)\Rightarrow \sum\limits_{i|n} \frac{\mu(i)}{i}=\frac{\varphi(n)}{n} i∣n∑iμ(i)⋅n=φ(n)⇒i∣n∑iμ(i)=nφ(n),秒了。 - μ ( n ) \mu(n) μ(n) 是积性函数,这个上文解释过了。
代码实现预处理 μ \mu μ
μ \mu μ 是积性函数,线性筛带走。
void init(int x)
{
mu[1]=1;
for(int i=2;i<=x;i++)
{
if(!vis[i])
pri[++cnt]=i,mu[i]=-1;
for(int j=1;j<=cnt&&i*pri[j]<=x;j++)
{
vis[i*pri[j]]=1;
if(i%pri[j]==0) break;
mu[i*pri[j]]=-mu[i];
}
}
}
参考文献
式子七答案
φ = φ ∗ ϵ = φ ∗ I ∗ μ = I d 1 ∗ μ \begin{aligned} \varphi&=\varphi *\epsilon\\ &=\varphi*I*\mu\\ &=Id_1*\mu \end{aligned} φ=φ∗ϵ=φ∗I∗μ=Id1∗μ
结尾
有没有感受到用狄卷理解莫反“降维打击”的快感?
由于我是自学的,有一些地方会有纰漏,欢迎指出。
没有例题是因为还没去刷,大家如果想锻炼推式子能力可以看参考文献 2。