前言
中等組合計數與初等組合計數大有不同,有人指出,初等組合計數看天賦,中等組合計數看套路,這句話很好地說明了我接下來,即將呈現給各位的知識的特點,也提示了應有的學習態度,我承認此處知識確實很高深,不好入門,本人也是在毫無外援,靠幾篇博客所學,特此感謝peng-ym,我已體會到了單打獨斗的痛苦與折磨了,特此作此小結,希望后人能少走彎路,直達思維迷宮的終點。
容斥原理
容斥原理
設有集合\(\{S_1,S_2,...,S_n\}\),\(|S_i|\)表示集合大小,有:
用途:直接做組合計數問題不好做,可以考慮容斥,
時間復雜度:\(O(2^n)\)
證明:
不妨提出交集集合數的概念,為幾個集合交集,而集合重復次數,為該集合在進行大小計算時被累加的次數,於是可以列表
交集集合數 | 1 | 2 | 3 | ... | i | ... | n |
---|---|---|---|---|---|---|---|
符號表示 | \(S_i\) | \(S_i\bigcap S_j\) | \(S_i\bigcap S_j \bigcap S_k\) | ... | \(\bigcap_{j=1}^iS_j\) | ... | \(\bigcap_{j=1}^nS_j\) |
集合重復次數 | |||||||
當前操作 |
當前操作的意思是是否累加該個集合大小,於是
1.考慮原式的第1項
交集集合數 | 1 | 2 | 3 | ... | i | ... | n |
---|---|---|---|---|---|---|---|
符號表示 | \(S_i\) | \(S_i\bigcap S_j\) | \(S_i\bigcap S_j \bigcap S_k\) | ... | \(\bigcap_{j=1}^iS_j\) | ... | \(\bigcap_{j=1}^nS_j\) |
集合重復次數 | \(C_1^1\) | \(C_2^1\) | \(C_3^1\) | ... | \(C_i^1\) | ... | \(C_n^1\) |
當前操作 | + |
2.考慮原式的第2項
交集集合數 | 1 | 2 | 3 | ... | i | ... | n |
---|---|---|---|---|---|---|---|
符號表示 | \(S_i\) | \(S_i\bigcap S_j\) | \(S_i\bigcap S_j \bigcap S_k\) | ... | \(\bigcap_{j=1}^iS_j\) | ... | \(\bigcap_{j=1}^nS_j\) |
集合重復次數 | \(C_1^1\) | \(C_2^1-C_2^2\) | \(C_3^1-C_3^2\) | ... | \(C_i^1-C_i^2\) | ... | \(C_n^1-C_n^2\) |
當前操作 | \(+\) | \(-\) |
3.考慮原式的第3項
交集集合數 | 1 | 2 | 3 | ... | i | ... | n |
---|---|---|---|---|---|---|---|
符號表示 | \(S_i\) | \(S_i\bigcap S_j\) | \(S_i\bigcap S_j \bigcap S_k\) | ... | \(\bigcap_{j=1}^iS_j\) | ... | \(\bigcap_{j=1}^nS_j\) |
集合重復次數 | \(C_1^1\) | \(C_2^1-C_2^2\) | \(C_3^1-C_3^2+C_3^3\) | ... | \(C_i^1-C_i^2+C_i^3\) | ... | \(C_n^1-C_n^2+C_n^3\) |
當前操作 | \(+\) | \(-\) | \(+\) |
....
於是我們可以得到對於i個集合交集的重復次數,表達式應為\(C_i^1-C_i^2+C_i^3-...+[-(-1)^i]C_i^i=\sum_{j=1}^i[-(-1)^i]C_i^j\),而又有引理:
故上式結果為1,於是我們可以說每個交集部分當且僅當重復一次,故得證。
多重集組合數
設\(\{n_1a_1,n_2a_2,...,n_ka_k\}\)表示有\(n_1\)個\(a_1\),\(n_2\)個\(a_2\)....的可重集合,從中取r個元素的方案數為
證明:
所有方案數(不考慮元素的個數,即設其數量無限)不難得知是原式第一項,而當考慮其中一種元素必然不滿足條件不難得知為原式第二項,但是如此導致方案數減多了,於是加回兩種元素必然選多了,以此類推,不難得知為容斥。
練習
唯一分解定理
數學語言:\(n=p_1^{c_1}p_2^{c_2}...p_m^{c_m}(gcd(p_1,p_2,...,p_m)==1)\)
文字語言:任何一個數有且僅能被分解成幾個質因數之積。
用途:約數問題隱含條件
整除分塊
形式:\(\sum_{i=a}^b[c/i]d\)
解法:\([c/i]=[c/[c/[c/i]]]\),所以\(i-[c/[c/i]]\)的值都相同,故一起處理。
時間復雜度:\(O(\sqrt n)\)
證明:\(c/i\in[1,\sqrt n]\),故得證。
狄利克雷卷積
定義:\((f*g)(n)=\sum_{d|n}f(d)g(n/d)\)(讀做f卷g)
性質:
- 交換律 \(f*g=g*f\)
- 結合律\(f*g*h=f*(g*h)\)
- 分配律\((f+g)*h=f*h+g*h\)
用途:
- 函數證明
- 推式
(完全)積性函數
概念
完全積性函數:
定義:\(f(pq)=f(p)f(q)\)
積性函數:
定義:\(f(pq)=f(p)f(q)(gcd(p,q)==1)\)
共性:
- 積性函數卷積性函數仍為積性函數,不妨簡稱積積得積。
證明:
設\(h=f*g,gcd(p,q)==1\),有
又有對於任意\(x,y,f(xy)=f(x)f(y),g(pq/xy)=g(p/x)g(q/y)\),故x,y對應pq的一個約數d的\(f(d),g(pq/d)\),而相反地\(f(d),g(pq/d)\)只能唯一分解成一對x,y,故得證。
特別地有\(f*I\)
-
由唯一分解定理\(f(n)=f(p_1^{c_1})f(p_2^{c_2})...f(p_m^{c_m})\)
-
設\(f\)為積性函數,\(f*\epsilon=f\)
-
每個積性函數會存在\(f(ij)\)與\(f(i),f(j)\)的關系,可以通過約數拆分,容斥以及分類討論,得到關系。
常見完全積性函數
恆等函數
符號:\(I\)
表達式:\(I(n)=1\)
性質:
- \((f*I)(n)=\sum_{d|n}f(d)\)
單位函數
符號:\(id\)
表達式:\(id(n)=n\)
- 擴展:
\(id^2(n)=n^2\)也為完全積性函數,更一般地,\(id^k(n)=n^k\)也為積性函數。
元函數
符號:\(\epsilon\)
表達式:\(\epsilon(n)=(n==1)\)
性質:
\(f*\epsilon=f\)
常見積性函數
歐拉函數
符號:\(\varphi\)
表達式:\(\varphi(n)=n\prod_{i=1}^{m}\frac{p_i-1}{p_i}\)(\(p_i\)為n質因子)
表達式的證明:
法一:數學歸納
法二:唯一分解定理+積性拆分
性質:
-
積性
-
\(\varphi(n)=\varphi(n/p)\times p(p\in prime,p|n,p^2|n)\)
證明:
\(\varphi(n)=n\prod_{i=1}^{m}\frac{p_i-1}{p_i}=\frac{n}{p}\prod_{i=1}^{m}\frac{p_i-1}{p_i}*p=\varphi(n/p)\times p\)
用途:線性遞推
- \(\varphi *I=id\ or\ \sum_{d|n}\varphi(d)=n\)
證明:
由積積得積易知\(\varphi*I\)也為積性函數,故不妨記\(f=\varphi*I\),於是由唯一分解定理有\(f(n)=f(p_1^{c_1})f(p_2^{c_2})...f(p_m^{c_m})\),對於其中一項\(f(p_i^{c_i})=\varphi(1)+\varphi(p_i^1)+...+\varphi(p_i^{c_i})=1+p_i-1+p_i(p_i-1)\)
\(+...+p_i^{c_i-1}(p_i-1)=1+(p_i-1)(1+...+p_i^{c_i-1})=1+\)
\((p_i-1)\frac{p_i^{c_i}-1}{p_i-1}=1+p_i^{c_i-1}-1=p_i^{c_i}\),於是\(f(n)=p_1^{c_1}p_2^{c_2}...p_m^{c_m}=n\),所以得證。
用途:
1.隱含條件,式子證明
約數個數
符號:\(d\)
表達式:\(d(n)=\sum_{d|n}1=\sum_{i=1}^{n}(d|n)=(c_1+1)(c_2+1)...(c_m+1)\)
性質:
-
\(d(n)=\frac{d(n/p)f(n)}{f(n/p)}\)(f(n)表示其最小質因子的個數+1,由定義感性理解易證)
-
\((d*I)(n)=\sum_{d|n}d(d)=\prod_{i=1}^{m}\frac{(c_i+2)(c_i+1)}{2}\)
證明:
由積積得積設\(f(n)=\sum_{d|n}d(d)=f(p_1^{c_1})...f(p_m^{c_m})\),對於其中一項\(f(p_i^{c_i})=1+2+3+...+c_m+1=\frac{(c_m+2),(c_m+1)}{2}\),合並易證。
- \(\sum_{i=1}^nd(i)=\sum_{i=1}^n[\frac{n}{i}]\)
證明:
對於單個約數來看,每個約數\(i\)各\([\frac{n}{i}]\)個。
- \(d=I*I\)
證明:
\((I*I)(n)=\sum_{d|n}1\),不難得知,每個約數都被統計了一次。故得證。
- \(d(ij)=\sum_{x|i}\sum_{y|j}(gcd(x,y)==1)\)
證明:
考慮函數映射,對於\(ij\)中一個約數\(k\)而言,它由唯一分解定理有\(p^c\)這個質因子的次方,設\(i\)有\(p^a\),\(j\)有\(p^b\),有以下的映射方式:
- \(a\ge c\),從i中選擇所需質因子。
- \(a< c\),從j中選擇\(p^{c-a}\)
以此對於\(ij\)的一個約數\(k\)我們能夠生成唯一一對\(x,y\),而對於唯一一對\(x,y\)我們能唯一還原成一個\(k\),所以我們可以說它們是一一對應的,於是得證。
約數和
符號:\(\sigma\)
表達式:\(\sigma(n)=\sum_{d|n}d=\sum_{d=1}^n(d|n)d=\prod_{i=1}^m\sum_{j=0}^{c_i}p_i^{c_j}=\)
\((1+p_1+...+p_1^{c_1})(1+p_2+...+p_2^{c_2})...(1+p_m+...+p_m^{c_m})\)
性質:
-
\(\sigma(n)=\frac{\sigma(n/p)f(n)}{f(n/p)}=\prod_{i=0}^{c_1}p_i^{i}\),由定義感性理解易證)
-
\(\sum_{d|n}\sigma(d)=\prod_{i=1}^{m}\sum_{j=0}^{c_i}p_i^j(c_i-j+1)\)
證明:
由積積得積設\(f(n)=\sum_{d|n}\sigma(d)=\prod_{i=1}^mf(p_i^{c_i})\),對於其中一項\(f(p_i^{c_i})=1+1+p_i+1+p_i+p_i^2+...1+...+p_i^{c_i}=\)
\((c_i+1)+c_ip_i+...+p_i^{c_i}\),合並即得證。
- \(\sigma=I*id\)
證明:
\((I*id)(n)=\sum_{d|n}d\),此時不難得知每個約數的值都被累加了一次,故得證。
Mobius 函數
符號:\(\mu\)
表達式:
\(\mu(n)=0\)(有相同質因子)
\(\mu(n)=1\)(有偶數個不同質因子)
\(\mu(n)=-1\)(有奇數個不同質因子)
性質:
\(\sum_{d|n}\mu(d)=(n==1)\ or\ \mu*I=\epsilon\)
證明:
法一:數學歸納
- 倒推(唯一分解定理+積性拆分)
由積積得積設\(f(n)=\sum_{d|n}\mu(d)=\prod_{i=1}^{m}f(p_i^{c_i})\),對於其中一項有\(f(p_i^{c_i})=\mu(1)+\mu(p_i)+\mu(p_i^2)+...+\mu(p_i^{c_i})=0\),特別地,當n=1,不能進行質因數分解,此時結果為1,所以得證。
- 順推
假設\(\sum_{d|n}\mu(d)\)中該n以前所有數滿足條件,考慮給n乘一個質數p,只是給原式多了一個取負的部分,而對於所有質數顯然滿足條件,特別的當n=1,不滿足條件,等於1,故得證。
思路創造者:lsy
法二:容斥原理
不妨設n的質因數有c個,對於選取的d質因子次數為0,有\(C_c^0\),而次數為1,\(C_c^1\)...,則有
由上標公式易知該式只有當n=1時為1,其余情況為0,故得證。
\(\sum_{d|n}\frac{\mu(d)}{d}=\frac{\varphi(n)}{n}or\ id*\mu=\varphi\)
證明:
法一(容斥):
不難得知
由容斥原理不難得知\(\sum_{d|n}\frac{\mu(d)n}{d}=\varphi(n)\),即\(\sum_{d|n}\frac{\mu(d)}{d}=\frac{\varphi(n)}{n}\),故得證。
法二(狄利克雷卷積):
注意到\((\mu*id)(n)=\sum_{d|n}\mu(d)id(n/d)=\sum_{d|n}\frac{\mu(d)n}{d}\),且有
即
所以
\(\mu^2(i)\)實際意義為一個數的約數中不含一個平方數。
\(\mu(ij)=\mu(i)\mu(j)(gcd(i,j)==1)\)
線性篩積性函數
形式:積性函數如\(\sum_{d|n}f(d)g(d)\)
埃式篩
時間復雜度:\(O(nlog(n))\)(剪支可以有\(O(nloglog(n))\))
方法
- 邊處理出質數,邊利用積性函數,篩出前面結果
- 對於式子中一個部分考慮哪些會被它作出貢獻
歐式篩
時間復雜度:\(O(n)\)
基本思路:
- 證明該函數為積性函數。
- 對於互質更新直接利用積性。
- 解決\(f(n)=f(n/p)\times ?(p|n,p^2|n)\),通常對最小質因子進行考慮。
解決辦法:1.利用已學知識,寫出通項公式 2.唯一分解定理+積性拆分
Mobius反演
約數型
證明:
1.容斥:
把\(f(d)\)抽象成d這個約數的性質,\(F(n)\)即n的所有約數的性質之和,故要求\(f(n)\),我們先把\(F(n)\)減去\(F(d)\),d正好比n少一個質因子,而系數正好為\(\mu(n/d)\),但是這樣減多了,於是加回\(F(d)\),此處d正好比n少兩個不同質因子,系數也正好為\(\mu(n/d)\),...,於是得證。
2.代數:
3.狄利克雷卷積:
注意到\(F=f*I,\mu*i=\epsilon\),所以
即
倍數型:
證明:
1.代數:
2.狄利克雷卷積:
考慮已經證過約數型的式子,而狄利克雷卷積不適合倍數型的式子,考慮分數倒置,設\(F'(n)=F(\frac{1}{n}),f'(n)=f(\frac{1}{n}),F(n)=\sum_{d|n}f(d)\),故有:
而
故得證
輔助公式
證明:
代入Mobius函數的卷\(I\)的性質即可。
練習
杜教篩
明確作用:線性篩的優化
基本表達式:
設\(f,g,h\)均為積性函數並滿足\(h=f*g\),\(f\)為所求,並設\(s(n)=\sum_{i=1}^nf(i)\),有
證明:
故得證
實例:
- \(s(n)=\sum_{i=1}^n\mu(i)\)
解:
注意到\(\mu*I=\epsilon\),所以所需杜教篩式子為\(I(1)s(n)=\sum_{i=1}^n\epsilon(i)-\sum_{d=2}^nI(d)s(n/d)\),化簡即\(s(n)=1-\sum_{d=2}^ns(n/d)\),故問題解決。
- \(s(n)=\sum_{i=1}^n\varphi(i)\)
解:
注意到\(\varphi*I=id\),所以杜教篩式子為\(I(1)s(n)=\sum_{i=1}^nid(i)-\sum_{d=2}^nI(d)s(n/d)\),即\(s(n)=\frac{(1+n)n}{2}-\sum_{d=2}^ns(n/d)\),故問題得解。
- \(s(n)=\sum_{i=1}^ni\varphi(i)\)
解:
此題無直接性質,故考慮待定函數,設\(h=f*g,f(n)=n\varphi(n)\),有\(h(n)=\sum_{d|n}d\varphi(d)g(n/d)\),而要簡化式子,自然想到\(\frac{n}{d}d=n\),於是猜\(g=id\),故\(h(n)=n\sum_{d|n}\varphi(n)=n^2\),所以所求杜教篩式子為\(id(1)s(n)=\sum_{i=1}^ng(i)-\sum_{d=2}^nid(d)s(n/d)\),化簡即\(s(n)=\frac{n(n+1)(2n+1)}{6}-\sum_{d=2}^nd\times s(n/d)\),故問題解決。
套路總結
約數結論小結
- \(gcd(a,b)\leq|a-b|(a!=b)\)
- 積和互質結論:\(gcd(a,b)=1\Leftrightarrow gcd(a+b,ab)=1\)
- \(gcd(a,b,c)=gcd(gcd(a,b),c)\)
- \(gcd(ak,bk,c)=gcd(k\times gcd(a,b),c)\)
- gcd前提判斷
約數計數問題
三種角度:
三大思路:
Mobius反演\(\Longleftrightarrow\)容斥原理,以及實際意義(如\(\sum\),一定要注重)
等式變換:
對應相等\(\Longleftrightarrow\)約數拆分
(反證法,分數反證,因式分解)
杜教篩
- 看是否有現成積性函數
- 尋找積性函數性質
- 待定函數法確定積性函數
式子證明套路:
數列通項公式
- 構造等差
- 擴大做差
- 幾何意義
狄利克雷卷積:
- 尋找積性函數
- 尋找積性性質
- 列出積性等式
- 試圖抵消並配出所需
(對於倍數型式子可采取分數倒置的方法)
映射:
- 尋找映射對象
- 尋找映射方式
- 證明一一對應
適用范圍:函數的證明
質因數分解
注意1不能質因數分解的情況
唯一分解定理+積性拆分
- 試圖證明積性(利用積積得積,或暴力證明)。
- 數學歸納唯一分解定理分解,對單個質因子次方考慮。
容斥
- 明確被容斥對象
- 尋找容斥對象(注意前后正反都可以)
- 遞推尋找加加減減關系
數學歸納
- 明確狀態
- 轉移方程(順退,倒推)
- 邊界
中等組合計數與數據結構
- 不離線白不離線。
- 要求某項小於某數,保留該項,排序選擇。
- 什么變,維護什么。
式子變換套路
容斥
- 盡可能把式子除成質數或互質形式
- 遇到有限制的容斥,可以采取更改容斥范圍的方法
Mobius反演
三種形式:約數型,倍數型,輔助公式
- \(\sum_{i=a}^b\sum_{j=c}^dgcd(i,j)==k\),Monius反演常見標志。
- 半個Mobius反演。
- 默認\(a<b\)簡化問題。
- 單個gcd枚舉提前。
- \(\sum_{d|gcd(i,j)}\mu(d)=(gcd(i,j)==1)\)可一定程度上代替Mobius反演。
- 整除分塊前放。
- \(\sum_{k|d}\sum...\sum(a==d)=\sum...\sum(k|a)\)
- 輔助公式解決三元環問題,注意三元環形式要作為整體前放。
\(\sum\)變換
可維護
- \(\sum_{n|d}f(d/n)\),實質是為了追求倍數型維護.
- \(\sum_{d|n}f(n/d)\),實質積性函數.
變式
- \(\sum(a+b)=\sum a+\sum b\),sigma的可拆分性
- \([[a/b]/c]=[\frac{a}{bc}]\)。
- \(\sum_{d|i}\)枚舉提前,或換元消判。
- \(\sum_{d|n}f(d)g(n/d)=\sum_{d|n}f(n/d)g(d)\)兩種形式雖等價,但推式難度有差別。
- 縮小枚舉\(i=i'k,\sum_{i=a}^b(k|i)i=\sum_{i=[\frac{a-1}{k}]+1}^{\frac{b}{k}}ik\)
- 放大枚舉\(i'=ik,\sum_{i=a}^bik=\sum_{i=ak,k|i}^{bk}i\)
- \(\sum_{i=1}^a\sum_{j=1}^b[a/i][b/j]\)為約數函數前綴和。
- \(\sum_{i=1}^a\sum_{j=1}^bij\)為兩次等差。
- \(\sum_{i=1}^af(ix)\)可以動態數組維護。
\(\prod\)變換
- \(\prod_{?} d=d^{\sum_{?}}\)
- \(d^{\sum_{?}?}=\prod_{?}d^{?}\)
- \(\prod_{i=1}^ni=n!\)
其他
- 能代就代。
- 最后的殺手鐧-打表分塊(時間復雜度通常很接近\(10^8\)時用救命)
練習
-
定義一個函數\(f(n)\),把n進行質因數分解,得到\(n=\prod_{i=1}^mp_i^{c_i}\),函數值即對於每一個\(p_i^{c_i}\),如果次數等於1,則累乘-2,次數等於2,則累乘1,否則累乘0的值,如\(f(50)=1\times(-2)=-2\),現在有些詢問,詢問組數為t\((t\leq 100)\),每次詢問\(\sum_{i=1}^nf(n)\)的值\((n\leq 10^{10})\)。
-
有t組詢問,詢問\(\sum_{i=1}^n\sum_{j=1}^m(gcd(i+j,ij)==1)\),\(n,m\leq 10^5,t\leq 10^5\)。
-
記\(yyb=10^9+7\),\(f(n)\)表示在一\(n\times n\)的棋盤上,第i列障礙物的位置為\(i\times yyb\ mod\ (n+1)\),現在有n個棋子放入棋盤,要求任意一行一列只有一顆以下的棋子,的方案數,現在給出T組詢問,每組詢問詢問\([\prod_{i=1}^n\prod_{j=1}^mf(gcd(i,j))]\times [\prod_{x=1}^n\prod_{y=1}^mxy]\ mod\ yyb,\)\(T≤1000,1≤n,m≤10^6\)。
-
t組詢問,求\(\sum_{i=1}^n\sum_{j=1}^md(i)d(j)gcd(i,j)mod\ 10^9+7,t\leq 10^4,n,m\leq 10^5\),
尾聲
恭喜您,您已經達到了我的Mobius反演的水平,但願我的微薄之力,能助你一臂之力,君當更AK,吾獨AFO!