7.6&7.7 Math
寫在前面
- 重思維,重視演算法內部的邏輯,不要死記硬背。
- 多實踐,多做題,自己多推式子,找性質。
- 儘量不要看題解,自己思考
- 題目的意義在你開啟題解的那一刻就消失了。
康託展開
變進位制數
每一位上的進製為 \(b_i\),令 \(b_0=1\),則第 \(i\) 位的權重為 \(\prod_{j=0}^i b_j\),令變進位制數序列為 \(\overline{a_na_{n-1}\cdots a_1}\),則該數在 \(10\) 進位制下表示:
\[\sum_{i=1}^{n}\prod_{j=0}^{i}a_ib_j \]階乘進位制數
- 令 \(b_i=i\),則權重為 \(i!\)
廣義康託展開
- 變進位制數下的進制變換,即給出 \((A)_{s1}\),求 \((A)_{s2}\)
一般轉化成 \((A)_{s1}\to(A)_{10}\to(A)_{s2}\)
時間複雜度:\(O(n)\)
康託展開
- 將任意十進位制自然數轉換為階乘進位制數。
逆康託展開
- 將任意階乘進位制數轉換為十進位制自然數。
排列與變進位制數
- 任何一個 \(1,\cdots,n\) 的排列 \(p_1,\cdots,p_n\) 都對應唯一的階乘進位制數。
排列從小到大的排名:
\[\sum_{i=1}^n(rk_i-1)!+1 \]其中 \(rk_i\) 表示 \(i\) 在以 \(i\) 為起點的字尾中的排名。
數論數學
一些複雜度分析
\[\begin{aligned} \large\texttt{素數分佈:}&\lim_{n\to \infty} \dfrac{\pi(n)\times \ln n}{n}=1\\ \large\texttt{調和級數:}&\sum_{i=1}^{n} \dfrac{1}{i}=O(\log n)\\ \large\texttt{素數調和級數:}&\sum_{p=1|p\in\operatorname{prime}}^{n} \dfrac{1}{p}=O(\log \log n)\\ \end{aligned} \]求逆元
\(a\) 的逆元:\(a\times a^{-1}\equiv 1\pmod p\)
存在逆元:\(\gcd(a,p)=1\)
- 費馬小定理 (尤拉定理特殊情況)
- 擴充套件歐幾里得
考慮 \(ax+kp=1\) 的解。
- 尤拉定理
- 線性求逆元 1
- 線性求逆元 2
求 \(\prod a_i\) 的逆元,再反向回退。
擴充套件尤拉定理
\[a^b\bmod p= \begin{cases} a^{b\bmod \varphi(p)}&\gcd(a,p)=1\\ a^b&\gcd(a,p)\neq1,b\leq \varphi(p)\\ a^{b\bmod \varphi(p)+\varphi(p)}&\gcd(a,p)\neq1,b\geq \varphi(p)\\ \end{cases} \]拉格朗日插值
- 任何一個 \(n\) 次多項式一定能用不同的 \(n+1\) 個點表示出來。
若已知 \(y=f_x\) 過點 \((x_0,y_0),(x_1,y_1),\cdots,(x_n,y_n)\) ,考慮構造一個次數不超過 \(n\) 的多項式:
\[f_x=\sum_{i=0}^{n} y_i\prod_{j\not= i}\dfrac{x-x_j}{x_i-x_j} \]此時滿足 \(f_{x_k}=y_k|k\in[0,n]\)
中國剩餘定理
構造方案:
\[ans=\sum_{i=1}^n a_i\times\dfrac{M}{a_i}\times(\dfrac{M}{a_i})^{-1}+\operatorname{lcm}(a_i)\\ M=\prod_{i=1}^n a_i \]擴充套件中國剩餘定理
- 對於兩個同餘方程,利用擴充套件歐幾里得兩兩合併。
Meet in the middle
- 雙向搜尋,中間合併。
BSGS 離散對數
求解 \(a^x\equiv b\pmod p\)
令 \(x=A\lceil\sqrt p\rceil-B\),則有 \(a^{A\lceil\sqrt p\rceil-B}\equiv b\pmod p\),即:\(a^{A\lceil\sqrt p\rceil}\equiv b\times a^B\pmod p\)
我們已知 \(a,b\),所以只需列舉 \(B\),計算出 \(b\times a^B\) 存入 Hash/map
中,再列舉 \(A\),計算出 \(a^{A\lceil\sqrt p\rceil-B}\),在 Hash/map
中查詢是否有相等的一項,從而得到 \(x\) 的解。
時間複雜度:Hash
\(O(\sqrt p)\) ,map
\(O(\sqrt p\log p)\)
線性篩
- 積性函式:\(f_{ab}=f_a\times f_b\)
數論分塊
- 將 \(1,\cdots,n\) 按 \(\lfloor\dfrac{n}{i}\rfloor\) 的值進行劃分,時間複雜度:\(O(\sqrt n)\)
區間篩法
- 給定區間 \([l,r]\),求出區間 \([l,r]\) 內有多少質數 \((l,r\leq 10^{12},r-l+1\leq10^6)\)
我們知道 \(r\) 以內的合數的最小質因數一定不超過 \(\sqrt r\),所以如果有 \(\sqrt r\) 內的素數表的話,就可以利用線性篩在 \(O(r-l+1)\) 的時間篩出質數。
構造
- 考驗思維。
構造題的好兄弟 (1) 尤拉路
從其中任意一點出發,不重複的走完所有邊。
如果最後回到起點,則稱為歐拉回路;如果沒有回到起點,則稱為尤拉通路。
- 無向圖中有且僅有兩個點為奇點,存在以這兩個點為起點和終點的尤拉通路。
- 無向圖中所有點均為偶點,存在歐拉回路。
- 有向圖中有且僅有一個出度比入度大 \(1\) 的點和一個入度比出度大 \(1\) 的點,其他點出度入度均相等,則存在以前者為起點,後者為終點的尤拉通路。
- 有向圖中所有點的出度入度均相等,存在歐拉回路。
構造題的好兄弟 (2) 哈密頓路
從其中任意一點出發,不重複的經過所有點。
如果最後回到起點,則稱為哈密頓迴路;如果沒有回到起點,則稱為哈密頓通路。
-
Dirac 定理:\(n\) 個頂點的無向圖中,若所有頂點的度數都 \(\geq \lceil\dfrac{n}{2}\rceil\),則一定存在哈密頓迴路。
-
競賽圖:無向完全圖給每條邊標方向所生成的有向圖。
-
\(n(n\geq 2)\) 階競賽圖一定存在哈密頓通路。
組合數學
四大基本原理
- 不相交路徑計數
\(n\) 個點的 DAG,問 \(a\to b\) 和 \(c\to d\) 的不相交路徑條數。
首先問題轉化為總路徑減相交路徑。
拓撲排序,處理出 \(f_{i,j}\) 表示 \(i\) 到 \(j\) 的路徑條數,列舉第一個交點 \(p\),處理出 \(a,c\) 分別到 \(p\) 不相交的路徑條數,再乘以 \(p\) 到 \(b,d\) 可以相交的路徑條數。
排列與組合
- 排列:\(A_n^m=\dfrac{n!}{(n-m)!}\)
- 圓排列:\(A_n^{m'}=\dfrac{n!}{m(n-m)!}=\dfrac{A_n^m}{m}\)
- 組合:\(C_n^m={n\choose m}=\dfrac{n!}{m!(n-m)!}=\dfrac{A_n^m}{m!}\)
全錯位排列
- \(\forall i\in[1,n]\),滿足第 \(i\) 個位置上的數不是 \(i\) 的排列數。
Fake 二項式定理
\[\sum_{i=0}^n (-1)^i{n\choose i}=0 \]數列
卡特蘭數
- 從點 \((0,0)\) 到點 \((n,n)\),每次只能向右或上移動一個單位,求路線處於 \(y=x\) 之下的路徑數。
變式:從 \((0,0)\) 到 \((n,m)\),條件同上。
\[\texttt{Ans}={n+m\choose m}-{n+m\choose m-1} \]-
\(n\) 個點的二叉樹劃分。
-
\(n+3\) 個點多邊形的三角剖分。
斐波那契數列
\[\sum_{i=1}^n F_i=F_{n+2}-1\\ \sum_{i=1}^n {F_i}^2=F_nF_{n+1}\\ \sum_{k=1}^n F_{2k-1}=F_{2n}\\ \sum_{k=1}^n F_{2k}=F_{2n+1}-1\\ F_n=F_mF_{n-m+1}+F_{m-1}F_{n-m}\mid m\leq n\\ F_{n+1}F_{n-1}={F_n}^2+(-1)^n\\ \gcd(F_i,F_j)=F_{\gcd(i,j)}\\ n\mid m \Longleftrightarrow F_n\mid F_m\\ \]第一類斯特林數
- \(n\) 個不同元素,構成 \(m\) 個圓排列的方案數。
第二類斯特林數
- \(n\) 個不同元素,劃分成 \(m\) 個非空集合的方案數。
概率期望
古典概型
- 隨機試驗包含的單位時間是有限的,並且每個單位時間發生的可能性均相等。
\(P_i\) 表示事件 \(i\) 的概率。
\[\sum_{i=1}^n P_i=1\\ \int P_i=1 \]幾何概型
- 隨機試驗的結果是無限的,並且每個基本結果發生的概率相同。
加法原理 乘法原理
- 對於獨立事件 \(A\) 和 \(B\),\(P_{A\bigcap B}=P_A\times P_B\)
- 對於並列事件 \(A\) 和 \(B\),\(P_{A\bigcup B}=P_A+P_B\)
期望的線性性
\[E_x=\sum_{i=1}^n P_i x_i\\ E_{ax+b}=E_{ax}+E_b=aE_{x}+E_b\\ \]條件概率
- 當事件 \(B\) 已經發生時,事件 \(A\) 發生的概率: