組合數學:容斥原理及其應用
容斥原理
例題:從1到1000中不能被5,6,8整除的整數個數。 令P1具有被5整除的性質,P2具有被6整除的性質,P3被8整除性質。 S是前1000個正整數的集合希望求出三個性質同時不滿足的個數 |A1| = floor(1000/5) = 200;|A2| = floor(1000/6) = 166 |A3| = floor(1000/8) = 125 |A1交A2|是可以同時被56整除的,同時被整除就是當且僅當被他們最小公倍數整除 lcm{5,6} = 30 所以|A1 A2| = floor(1000/30) = 33; 同理能被5,6,8都整除的是lcm{5,6,8} = 120 |A1 A2 A3| = floor(1000/120) = 8 所以|~A1 ~A2 ~A3| = 1000 - (200+166+125) + (33+25+41) - 8 = 600 例題:M,A,T,H,I,S,F,U,N存在多少排列使得MATH,IS,FUN都不能作為連續字母出現? 令P1是S排列中包含 MATH性質,P2是包含單詞IS連續字母的性質,P3是具有包含單詞FUN連續字元的性質。 |S| = 9! = 362880 A1可以看做6個字母MATH,I,S,F,U,N的排列因此|A1| = 6! = 720 A2是M,A,T,H,IS,F,U,N八個字母排列 |A2| = 8! = 40320 A3是排列7個字母M,A,T,H,I,S,FUN |A3| = 7! = 7040 然後求滿足2個性質的排列 |A2 A1| 是MATH,IS,F,U,N 其他同理|A1 A2| = 5! |A2 A3| = 6! |A1 A3| = 4! |A1 A2 A3|是MATH IS FUN的排列是3! 所以|~A1 ~A2 ~A3| = 362880 - 720 - 40320 -5040 + 120 + 24 + 720 -6 = 317658 例題: 從0到99999有多少個包含數字2,5和8的整數? S是從0到99999的整數集合。令P1具有整數不包含數字2的性質,P2具有整數不包含數字5的性質 P3具有整數不包含數字8的性質。 a0 = 10^5 a1 = 9^5 a2 = 8^5 a3 = 7^5 可以知道本題答案是a0 - 3*a1 + 3*a2 - a3具有重複的組合
錯位排列
帶有絕對禁止位置的排列
X | |
X | X |
X | X |
X | X |
莫比烏斯反演
組合數學上莫比烏斯反演證明不太好懂,可以先從數論及其應用這本書入手。
設f為算術函式,f的和函式F(n) = sigma(f(d))(d|n) 它是根據f的值決定的。
那麼是否存在一種關係用F求出f我們令n=1,2,3...8則此時有
F(1) = f(1)
F(2) = f(1) + f(2)
F(3) = f(1) + f(3)
....
F(8) = f(1) + f(2) + f(4) +f(8)
我們可以解除f(n)
f(1) = F(1)
f(2) =F(2) - F(1)
..
f(8) = F(8) - F(4)
注意到f(n)是形式為+-F(n/d)的一些項的和,所以可能存在這樣的等式
f(n) = sigma(u(d)F(n/d));
其中u是算術函式等式成立的話,我們可以計算出u(1) = 1u(2) = -1
u(7)= -1 u(8) = 0又有F(p) =f(1) + f(p)給出f(p) = F(p) - F(1)其中p是素數
則u(p) = -1又因為F(p*p) = f(1) + f(p) + f(p*p)
f(p*p) = F(p*p) - (F(p)-F(1)) -F(1) = F(p*p) -F(p)
u(p*p) = 0所以對於任意的素數p切k>1有u(p^k) = 0
定義莫比烏斯函式u(n)定義
u(n) = 1 (n=1)
= (-1)^r (n=p1p2..pr,其中pr為不同的素數)
= 0
例題:
u(330) = u(2.3.5.11) = (-1)^4 = 1 ,u(660) = u(2^2 .3 .5 .11) = 0
莫比烏斯函式u(n)是乘性函式
假設m與n是互素的正整數,為了證明u(n)是乘法性質函式證明u(n) = u(m)u(n)
考慮n=1或者m=1的情況成立
假設m和n中至少一個被素數平方整除,那麼mn也被素數平方整除則u(mn) = 0
考慮M和n都不會含有大於1的素數的平方因子,m = p1p2..pn
n = q1q2..qn其中q1q2..qn是不同的素數,由於mn互素,則mn是s+t個不同的互素乘積
所以u(mn) = (-1)^(s+t) = (-1)^s (-1)^t = u(m)u(n)
莫比烏斯函式的和函式在n出的值F(n) = sigma(u(d))(d|n)滿足
F(n) = 1 (n=1) F(n) = 0(n>1)
證明如下:n=1的時候F(1) = sigma(u(d)) = u(1) = 1
n>1的時候,假設p是素數,k是正整數
F(p^k) = sigma(u(d)) = u(1) + u(p) + u(p*p) +...u(p^k)
= 1+ (-1) +0 + 0... = 0;
假設n是大於1的正整數,素數分解為n = p1^a1p2^a2..pt^at所以F(n) = F(p1^a1)...F(pt^at)
從而F(n) = 0
莫比烏斯反演公式若f是算術函式F為f的和函式
F(n) = sigma(f(d))(d|n)則對於任意正整數n有f(n) = sigma(u(d)F(n/d)) (d|n)
sigma(f(d))(d|n) = sigma(u(d)sigma(f(e)(e|n/d) )) = sigma(sigma (u(d))f(e)) (e|n/d)
因為d|n e|(n/d)同樣有e|n 和 d|(n/e)
所以化簡為 sigma( sigma( f(e) u(d))(d|(n/e)) (e|n))
由於 sigma (u(d) )= 0 除非 n/e = 1
sigma(u(d)F(n/d)) (d|n) = f(n) *1 = f(n)
入門題:
http://blog.csdn.net/qw4990/article/details/14055183