学习笔记 | 反演 | 二项式反演 | 莫比乌斯反演 | 狄利克雷卷积 |容斥
参考资料。
【数论】积性函数、莫比乌斯反演、狄利克雷卷积-nanoape
前言
**非常良心的博主的良心之作 **
不过…二项式反演还有莫比乌斯反演好像真的可以用小学容斥怒踩qwq…(果然我还是太菜了…
决定将二项式反演和莫比乌斯反演一起写了
不过窝写的好像挺繁琐的…不像是那种简洁明了只几句话讲懂的…
所以期待较少篇幅就讲明白的可以看看参考资料哦!
参考资料写的真心不错qwq
让我们一起感受一下组合数学的美趴!
引入
简单的容斥应用-全错排
n n n个人全站错位置的方案数
-
错排递推式子 f [ i ] = ( i − 1 ) ∗ ( f [ i − 2 ] + f [ i − 1 ] ) f[i]=(i-1)*(f[i-2]+f[i-1]) f[i]=(i−1)∗(f[i−2]+f[i−1]) ( f [ i ] f[i] f[i]为 i i i个人全错排的方案)还挺好推的不阐述了
那就简单地讲一讲?- 一种情况是 1 1 1和 i i i 交换位置 然后剩下的 n − 2 n-2 n−2个重排 这一部分答案为 ( n − 1 ) ∗ f [ n − 2 ] (n-1)*f[n-2] (n−1)∗f[n−2]
- 剩下的情况 1 1 1到 i i i的位置上去,但 i i i不到 1 1 1的位置上去 相当于 i i i的位置原来是1 这一部分答案为 ( n − 1 ) ∗ f [ n − 1 ] (n-1)*f[n-1] (n−1)∗f[n−1]
-
容斥!
大胆猜想小(
不)心(用)证明方案数为 ∑ i = 0 n ( − 1 ) i ∗ C n i ∗ ( n − i ) ! \sum_{i=0}^{n}(-1)^i*C_n^i*(n-i)! ∑i=0n(−1)i∗Cni∗(n−i)!

还是证明一下-
在计算有 m m m个人站对的方案时 由于我们计算的时候是直接钦定有多少个人站对,剩下的随意站的。
所以,在计算 0 , 1 , 2... m − 1 0,1,2...m-1 0,1,2...m−1个人站对的方案时,我们会将 m m m个人站对的方案重复计算。
会被计算这么多次
公式莫名挂了…所以贴图片了qwq

- 所以,就加上 ( − 1 ) m (-1)^m (−1)m,那么 m m m个人站对的方案数就抵消了
为什么 ∑ k = 0 m ( − 1 ) k ∗ C m k = ( 1 − 1 ) m \sum_{k=0}^{m}(-1)^k*C_m^k=(1-1)^m k=0∑m(−1)k∗Cmk=(1−1)m呢?
- 这是二项式定理,事实上,这有个特殊情况,即 m = 0 m=0 m=0时,左边的式子为 1 1 1
换一种写法:
∑ k = 0 n ( − 1 ) k ∗ C n k = [ n = 0 ] \sum_{k=0}^n(-1)^k*C_n^k=[n=0] k=0∑n(−1)k∗Cnk=[n=0]
- [ P ] [P] [P]表示 P P P成立时为 1 1 1,否则为 0 0 0
-
幕后
根据容斥得出来的一点东西…窝们来搞一搞反向推!博主随口乱讲大家不要在意
设 f ( i ) f(i) f(i)表示 i i i个人全站错的方案数, F ( i ) F(i) F(i)表示 i i i个人随便站的方案数
那么很显然有 F ( n ) = ∑ k = 0 n f ( i ) ∗ C n i F(n)=\sum_{k=0}^nf(i)*C_n^i F(n)=k=0∑nf(i)∗Cni
诶?如果窝们可以反向求出 f ( i ) f(i) f(i)不就厉害了嘛!
这个过程的流程是这样的:
首先说一句废话
f ( n ) = ∑ m = 0 n [ n = m ] ∗ C n m f ( m ) f(n)=\sum_{m=0}^n[n=m]*C_n^mf(m) f(n)=∑m=0n[n=m]∗Cnmf(m)
- 哦? [ n = m ] [n=m] [n=m]等价于 [ n − m = 0 ] [n-m=0] [n−m=0]
- 嗯?窝们上面不是有这个东西嘛? ∑ k = 0 n ( − 1 ) k ∗ C n k = [ n = 0 ] \sum_{k=0}^n (-1)^k*C_n^k=[n=0] ∑k=0n(−1)k∗Cnk=[n=0], n n n用 n − m n-m n−m代掉放到 [ n = m ] [n=m] [n=m]那里
⇒ \Rightarrow ⇒ f ( n ) = ∑ m = 0 n ∑ k = 0 n − m ( − 1 ) k ∗ C n − m k ∗ C n m f ( m ) f(n)=\sum_{m=0}^n \sum_{k=0}^{n-m} (-1)^k*C_{n-m}^k*C_n^mf(m) f(n)=∑m=0n∑k=0n−m(−1)k∗Cn−mk∗Cnmf(m)
- 显然 C n − m k ∗ C n m = C n k ∗ C n − k m C_{n-m}^k*C_n^m=C_n^k*C_{n-k}^m Cn−mk∗Cnm=Cnk∗Cn−km(相当于在 n n n个数里选两个集合,一个包含 k k k个元素,另一个包含 m m m个元素的方案数)
⇒ \Rightarrow ⇒ f ( n ) = ∑ m = 0 n ∑ k = 0 n − m ( − 1 ) k ∗ C n − k m ∗ C n k f ( m ) f(n)=\sum_{m=0}^n \sum_{k=0}^{n-m} (-1)^k*C_{n-k}^m*C_n^kf(m) f(n)=∑m=0n∑k=0n−m(−1)k∗Cn−km∗Cnkf(m)
- 交换两个 ∑ \sum ∑
⇒ \Rightarrow ⇒ f ( n ) = ∑ k = 0 n ( − 1 ) k ∗ C n k ∑ m = 0 n − k C n − k m ∗ f ( m ) f(n)=\sum_{k=0}^n(-1)^k*C_n^k\sum_{m=0}^{n-k}C_{n-k}^m*f(m) f(n)=∑k=0n(−1)k∗Cnk∑m=0n−kCn−km∗f(m)
- Emmmmm? ∑ m = 0 n − k C n − k m ∗ f ( m ) \sum_{m=0}^{n-k}C_{n-k}^m*f(m) ∑m=0n−kCn−km∗f(m)就是 F ( n − k ) F(n-k) F(n−k)
⇒ \Rightarrow ⇒ f ( n ) = ∑ k = 0 n ( − 1 ) k ∗ C n k ∗ F ( n − k ) f(n)=\sum_{k=0}^n(-1)^k*C_n^k*F(n-k) f(n)=∑k=0n(−1)k∗Cnk∗F(n−k)
- k k k的地方用 n − k n-k n−k代 让下标更好看一点
⇒ \Rightarrow ⇒ f ( n ) = ∑ k = 0 n ( − 1 ) n − k ∗ C n n − k ∗ F ( k ) = ∑ k = 0 n ( − 1 ) n − k ∗ C n k ∗ F ( k ) f(n)=\sum_{k=0}^n(-1)^{n-k}*C_n^{n-k}*F(k)=\sum_{k=0}^n(-1)^{n-k}*C_n^{k}*F(k) f(n)=∑k=0n(−1)n−k∗Cnn−k∗F(k)=∑k=0n(−1)n−k∗Cnk∗F(k)
千辛万苦。我们得到了这个东西。
F ( n ) = ∑ k = 0 n C n k ∗ f ( k ) F(n)=\sum_{k=0}^nC_n^k*f(k) F(n)=k=0∑nCnk∗f(k)
f ( n ) = ∑ k = 0 n ( − 1 ) n − k ∗ C n k ∗ F ( k ) f(n)=\sum_{k=0}^n(-1)^{n-k}*C_n^k*F(k) f(n)=k=0∑n(−1)n−k∗Cnk∗F(k)
反演的定义
设有两个函数 f , F f,F f,F满足
F ( n ) = ∑ k a n , k f ( k ) F(n)=\sum_ka_{n,k}f(k) F(n)=k∑an,kf(k)
已知
F
F
F求
f
f
f称作反演
- 可以利用未知量求已知量。
莫比乌斯反演!
- 求长度为
n
n
n的字符串且其循环节也为
n
n
n的字符串个数QwQ
- 循环节:最小长度的串重复 n / l e n n/len n/len此恰好为该字符串
窝们设 F ( i ) F(i) F(i)表示长度为 i i i的串的数量, f ( i ) f(i) f(i)表示长度为 i i i且循环节也为 i i i的数量
那么有
F ( i ) = ∑ d ∣ i f ( d ) F(i)=\sum_{d|i}f(d) F(i)=d∣i∑f(d)
- 可以得到
注意观察式子
F ( 1 ) = f ( 1 ) F(1)=f(1) F(1)=f(1)
F ( 2 ) = f ( 1 ) + f ( 2 ) F(2)=f(1)+f(2) F(2)=f(1)+f(2)
F ( 3 ) = f ( 1 ) + f ( 3 ) F(3)=f(1)+f(3) F(3)=f(1)+f(3)
F ( 4 ) = f ( 1 ) + f ( 2 ) + f ( 4 ) F(4)=f(1)+f(2)+f(4) F(4)=f(1)+f(2)+f(4)
F ( 5 ) = f ( 1 ) + f ( 5 ) F(5)=f(1)+f(5) F(5)=f(1)+f(5)
F ( 6 ) = f ( 1 ) + f ( 2 ) + f ( 3 ) + f ( 6 ) F(6)=f(1)+f(2)+f(3)+f(6) F(6)=f(1)+f(2)+f(3)+f(6)
↓ \downarrow ↓
f ( 1 ) = F ( 1 ) f(1)=F(1) f(1)=F(1)
f ( 2 ) = F ( 2 ) − F ( 1 ) f(2)=F(2)-F(1) f(2)=F(2)−F(1)
f ( 3 ) = F ( 3 ) − F ( 1 ) f(3)=F(3)-F(1) f(3)=F(3)−F(1)
f ( 4 ) = F ( 4 ) − f ( 2 ) f(4)=F(4)-f(2) f(4)=F(4)−f(2)
f ( 5 ) = F ( 5 ) − F ( 1 ) f(5)=F(5)-F(1) f(5)=F(5)−F(1)
f ( 6 ) = F ( 6 ) − F ( 2 ) − F ( 3 ) + F ( 1 ) f(6)=F(6)-F(2)-F(3)+F(1) f(6)=F(6)−F(2)−F(3)+F(1)
⇒ \Rightarrow ⇒ f ( i ) = ∑ d ∣ i μ ( d ) ∗ F ( i d ) f(i)=\sum_{d|i}\mu(d)*F(\dfrac{i}{d}) f(i)=d∣i∑μ(d)∗F(di)
其中:
μ ( d ) = { 1 , d = 1 ; ( − 1 ) k , d = p 1 ∗ . . . ∗ p k 0 , o t h e r w i s e \mu(d)=\begin{cases} 1,d=1;\\ (-1)^{k},d=p_1*...*p_k\\0,otherwise\end{cases} μ(d)=⎩⎪⎨⎪⎧1,d=1;(−1)k,d=p1∗...∗pk0,otherwise
- 其中 q 1 . . . q k q_1...q_k q1...qk是不相同的质数
接下来来证明一下这个东西QwQ.
如果你能够用容斥原理感性理解上述结论窝觉得可能就行了证明只需要知道方法…公式死记肯定会忘掉…总之感性理解是个好东西QwQ珂我没有
其实本质上也是一个容斥原理可以像上面证明二项式反演一样来证
好像… 更好的阅读体验… 要先把前面的那些东西(乱搞猜出莫比乌斯函数)稍稍忘掉哦~qwq
我们回忆一下一道题。是一道容斥入门题
求 [ l , r ] [l,r] [l,r]区间内和 n n n互指的数有多少个.
“我愿意沉默释放内心焰火”
本文作者:Averyta
711



被折叠的 条评论
为什么被折叠?



