知识总结
应该总结一些题目中常用的手法和结论,想到什么写什么吧,能力有限。
通用
- 刻画问题结构时多手玩观察规律。
- 刻画问题结构时考虑观察结构的一般性。对于无法下手的问题应该从不同的角度刻画。
- 想题过程若涉及大量分类讨论应该在写代码前仔细思考。
- 找不到性质或者找到性质不会证明时对小情况跑暴力试试。
- 局部分析,整体分析。
计数
-
做不了的限制多想想容斥,very important。
-
对排列计数可以考虑从前往后插入并钦定新插入的数的相对大小,或者按照值域顺序插入维护连续段 DP 状物。
-
不好看的式子化简多想想组合意义,常见的是插板或者小球染色之类的模型。
-
要对问题本质刻画清楚再做计数,很多计数问题要先解决判定问题或者把问题双射为另一个结构。
-
\(\bmod 2\) 计数观察结构的对称性。
-
相信考的题不需要多项式,使用卷积等结构时记得思考一下简便做法。
-
概率问题如果是浮点数输出思考一下有没有可能删掉没有意义的值很小的状态。
-
期望有关问题记得多考虑期望的线性性。即 \(E(A+B)=E(A)+E(B)\)。
-
记得一些高斯消元技巧,比如树上高消或者带状矩阵。
-
树甚至图计数相关试试 prufer 序列。
-
集合幂级数之类的理论。
-
卡特兰数 \(C_n = \dfrac{1}{n+1}\dbinom{2n}{n}\)。
\(C_n\) 为以下问题的答案:
- 长度为 \(2n\) 的合法括号序列数。
- 正 \(n+2\) 边形三角剖分方案数。
- \(n\) 个点的不同形态二叉树个数。
- 入栈序为 \(1\) 到 \(n\),对应出栈序个数。
均可以通过组合意义推出。括号序列对应格路计数,三角剖分与二叉树双射,出栈序对应括号序列。
-
Vandermonde's identity:\(\sum \limits_{i=0}^k \dbinom{n}{i}\dbinom{m}{k-i} = \dbinom{n+m}{k}\)。
-
\(\dbinom{n}{m} = \dbinom{n}{n-m}\),配合一些组合恒等式可以得到一些二级结论。
-
二项式反演等结构,本质就是将一些恰有 \(k\) 个的结构转化为钦定其中若干个,答案乘以容斥系数。
-
DP 转移不了考虑升维。
-
延迟钦定技巧,DP 过程无法直接进行的决策之后再执行。
-
有时候考虑对特殊结构刻画,例如单调栈,笛卡尔树。
-
反射容斥。\((0,0)\) 到 \((n,m)\) 不经过 \(y=x+l\) 和 \(y=x+r\),其中 \(l<0<r\),的方案数是 \(\sum \limits_{k} \dbinom{n+m}{n-k(r-l)}-\dbinom{n+m}{n-k(r-l)+r}\)。
-
上述反射容斥复杂度和 \(r-l\) 有关,有时关于其做根号分治可以解决复杂度问题。
-
Min-Max 容斥。
-
矩阵树定理有时候可能会考到。一般只需要记结论。无向图生成个数为度数矩阵减邻接矩阵删去一行一列的行列式。有向图以 \(k\) 为根的外向树个数为入度矩阵减有向邻接矩阵删去第 \(k\) 行第 \(k\) 列所得行列式,内向树计数则将入度矩阵改为出度矩阵。
-
OGF,EGF。
-
推式子方面,交换求和,换元等。
-
对某些计数结构钦定代表元。
-
Binomial theorem:\((x+y)^n = \sum \limits_{i=0}^n \dbinom{n}{i}x^iy^{n-i}\)。
-
第二类斯特林数 \(\begin{Bmatrix}n\\ m\end{Bmatrix}\),意义是有多少种方案将 \(n\) 个两两不同的元素划分进 \(k\) 个相同的非空集合。不难容斥算单个 \(\begin{Bmatrix}n\\ m\end{Bmatrix}\),可以 \(O(nm)\) 递推出 \(i \leq n, j \leq m\) 的所有 \(\begin{Bmatrix}i\\ j\end{Bmatrix}\)。
-
下降幂差分 \(\Delta(x^{\underline{m}})=mx^{\underline{m-1}}\)。其中 \(\Delta(f(x))=f(x+1)-f(x)\)。
-
差分满足 \(\Delta(uv)=u\Delta(v)+Ev\Delta(u)\),其中 \(Ev(x)=v(x+1)\)。对两边进行离散积分并移项得 \(\sum u\Delta(v)=uv-\sum Ev\Delta(u)\),从而可以对某些式子分步积分。
-
上升幂,普通幂,下降幂转化:
\(x^{\overline{n}}=\sum \limits_{k} \begin{bmatrix} n \\ k\end{bmatrix}x^k\)
\(x^n=\sum \limits_{k} (-1)^{n-k}\begin{Bmatrix} n \\ k \end{Bmatrix}x^{\overline{k}}\)
\(x^n=\sum \limits_{k} \begin{Bmatrix} n \\ k \end{Bmatrix}x^{\underline{k}}\)
\(x^{\underline{n}}=\sum \limits_{k} (-1)^{n-k}\begin{bmatrix} n \\ k \end{bmatrix}x^k\)
-
自然数幂求和:
\(\sum \limits_{i=1}^n i^k=\sum \limits_{i=1}^n \sum \limits_{j} \begin{Bmatrix} k \\ j\end{Bmatrix}i^{\underline{j}}=\sum \limits_{j}\begin{Bmatrix} k \\ j\end{Bmatrix} \sum \limits_{i=1}^n i^{\underline{j}}\)
其中离散积分 \(\sum x^{\underline{j}}=\dfrac{x^{\underline{j+1}}}{j+1}+C\),故 \(\sum \limits_{i=1}^n i^{\underline{j}} = \dfrac{(n+1)^{\underline{j+1}}}{j+1}\)。
可以在 \(O(k^2)\) 的复杂度得到答案,瓶颈在于处理第二类斯特林数。利用卷积可以在 \(O(k \log k)\) 的复杂度内求同行第二类斯特林数。
另一方面,注意到最终式子中只含有 \((n+1)^{\underline{j+1}}\),其可以被转化为次数至多 \(j+1\) 的关于 \(n\) 的多项式,故 \(\sum \limits_{i=1}^n i^k\) 是一个关于 \(n\) 的 \(k+1\) 次多项式。
线性筛可以在 \(O(k)\) 的复杂度内求出 \(1^k,2^k,\cdots,(i+1)^k\),故可知多项式 \(k+2\) 个点的取值 \((x_0,y_0),(x_1,y_1),\cdots,(x_{k+1},y_{k+1})\)。横坐标是连续整数的拉格朗日插值可以做到 \(O(k)\),故问题可以在 \(O(k)\) 复杂度内解决。
数据结构
- 比较重要的是,学会使用 bitset 刻画 DAG 可达性,有些问题做不了的时候记得考虑根号结构。
- 如果有显然的多维做法想办法降维。
- 有时候进行差分或者前缀和之类的操作能更好地维护信息,比如区间加区间 \(\gcd\)。
- 常见的数据结构技巧,例如扫描线,分治,启发式合并,启发式分裂等等,其中扫描线是泛用性最强的,多维问题对一维扫描线可以把多维问题降维。
- 扫描线时选择扫描线维度有时候是重要的,换维扫描线就是通过这个方式解决问题。
- 树上结构主要思考方向是树剖和点分治,树上 DP 转移的优化也要常考虑重链剖分或长链剖分。
- 邻域问题一般是考虑点分树,特别地小邻域问题考虑毛毛虫剖分,其大体想法是先重剖,然后每条重链特殊考虑开头 \(k\) 个点。
- 分治是一个很厉害的结构,最经典的应用是对时间轴分治,或者叫 CDQ 分治,可以将修改和询问分开,其本质就是每次递归时考虑左侧修改对右侧的影响。很多高维信息树套树比较麻烦可以考虑离线做这个 CDQ 分治,可以以一个 \(\log\) 的代价降一维。
- 需要支持插入删除的结构,可以考虑离线多一个 \(\log\) 利用线段树分治将删除变成撤销。
- 线段树维护复杂信息时直接考虑其本质是双半群结构,从而很多时候可以利用矩阵加法乘法刻画信息。劣势在于常数大,很多时候你需要考虑只维护矩阵中有意义位置以降低常数。
- 关于区间前缀最大值或之类的问题,考虑是否可以用单侧递归线段树。
- 区间 chkmax 等结构不一定是吉司机,有时候按照值域扫描线更方便维护。
- 多思考均摊结构,比如颜色段均摊或者势能线段树,势能线段树不会分析复杂度时考虑将你能优化的都写进去然后看看能不能简单卡掉,然后继续分析为什么会被卡掉。
- 树上问题做差分等操作有时候可以简化结构。
- 分块方面,考虑方向主要是序列分块,根号分治,时间轴分块和莫队,莫队优先级一般较低。块长未必一定和 \(\sqrt n\) 有关,有时候可以按 \(w\) 分块。
- 分块去 \(\log\) 一般考虑归并替代排序之类的。
- 莫队去 \(\log\) 考虑二次离线或者分块平衡。
- 折半报警器,二进制报警器。
- 边分治无法三度化时可以考虑点分治代替。
- 树上动态 DP 试试直接上静态 Top Tree。
构造,交互,Ad-Hoc
- 归纳。
- 每次找特殊的地方进行构造,例如使得值最小或最大。
- 树上构造考虑删叶子,DFS 序,BFS 序,欧拉序,子树归纳。
- 考虑操作过程半不变量与不变量,常常是形如总和,或者奇偶性,模意义下之类的。
- 抽屉原理。
- 染色。
- 将操作通过差分等结构转化成更为简单的操作。
- 赋值法。
- 分治逐步分解问题。
- 分组。
- 问题中的某些值可能只有 \(O(1)\) 种取值,此时可以对其值做分类讨论。
- 关于路径构造等问题很有可能是网络流或欧拉回路有关。
- 刻画整体和或某些量的范围,从而限制整体最小值或最大值的范围。
- 分类讨论一层不够时多往后讨论试试。
- 尝试分析极端情况。
- 先考虑必要结论,有可能几个强的必要条件在一起就充分了。
- 将问题转化为常见模型,例如二部图等结构。
- 调整法。
图论
-
Hall's Theorem 及其推论:对于二部图 \(G=(X,Y,E)\),最大匹配等于 \(|X|-\max \limits_{S\subseteq X} \{|S|-|N(S)|\}\)。
-
Menger's Theorem。不强于 Maximum flow minimum cut theorem。
-
König's Lemma:二部图最小点覆盖等于最大匹配。
-
Dilworth's Theorem:偏序集最小链划分等于最长反链。
-
区间-点匹配模型,区间-区间匹配模型等可以直接贪心的结构。
-
Hall's Theorem 有时只需要考虑特殊的 \(S\),例如区间或者前后缀。
-
拆点技巧。
-
DAG 最小路径覆盖:每个点拆成入点出点,\((u,v)\in E \rightarrow (s_u,e_v) \in E'\),跑最大匹配。
-
最大权闭合子图:将正数和负数点权分开,最小割。
-
正则二部图有完美匹配。
-
对于二部图,通过交错路可以刻画很多进一步的结构。
-
整数流定理:若网络容量均为整数,则最大流存在整数解。
-
Tutte–Berge formula:图 \(G=(V,E)\) 的最大匹配大小等于 \(\dfrac{1}{2} \min \limits_{U \subseteq V}(|U|+|V|-\mathrm{odd}(G-U))\),\(\mathrm{odd}(G-U)\) 表示 \(G-U\) 图内有多少个点数为奇数的连通分量。
-
Berge's Theorem:对于图 \(G\) 的一个匹配 \(M\),其是最大匹配,当且仅当不存在增广路。
-
切糕模型。
-
Undirected Vertex Geography:无向图 \(G\),棋子在起点 \(s\),两人轮流移动棋子,不能移动到重复点,无法移动判负。结论:先手必胜等价于 \(G\) 的所有最大匹配都包含 \(s\)。
-
二部图最大匹配必经点:对于 \(G=(X,Y,E)\) 求出最大匹配,考虑所有从左侧非匹配点出发的交错路的可能终点集合 \(S\),则对于 \(X\) 来说,\(S \cap X\) 为非必经点,其余为必经点。
-
特殊图最大匹配:度数为 \(1\) 的点必定在匹配中,尝试每次删去度数最小的点。
-
DAG 最小边路径覆盖,求最少多少条允许相交的路径可以覆盖所有边。将边看作点,\(e_i \rightarrow e_j\) 有边当且仅当原图中存在先经过 \(e_i\) 后经过 \(e_j\) 的路径,跑最小点路径覆盖。
-
原图最大团等于补图最大独立集。进一步若补图为二部图则可以求解原图最大团。
-
Vizing's Theorem:对于任意无向图 \(G\),\(\chi(G) \in \{\Delta(G),\Delta(G)+1\}\),\(\chi(G)\) 为边色数,\(\Delta(G)\) 为顶点最大度数。
-
König's Line Coloring Theorem:二部图满足 \(\chi(G)=\Delta(G)\)。
Proof:将两边点数补至相同,每次选左右两个 \(\mathrm{deg} < \Delta(G)\) 的点,在之间连边,最终会将二部图补为一个 \(\Delta(G)-\) 正则二部图,根据 Hall's Theorem 推论其边集可以被划分 \(\Delta(G)\) 个完美匹配,每个完美匹配赋一种颜色。
\(\square\)
另一种构造:
对于每个点 \(i\) 维护集合 \(S_i\) 表示目前 \(i\) 的邻边的所有颜色。依次考虑每条边 \((u,v)\)。若 \(\mathrm{mex}(S_u)=\mathrm{mex}(S_v)\),则 \(w_{u,v}:=\mathrm{mex}(S_u)\)。否则 \(\mathrm{mex}(S_u)\neq \mathrm{mex}(S_v)\),强制令 \(w_{u,v}:=\mathrm{mex}(S_u)\),其会与 \(v\) 的某个邻居颜色冲突,不妨记为 \(z\),令 \(w_{v,z}:=\mathrm{mex}(S_v)\),其有可能存在出边 \((z,k)\) 矛盾,继续令 \(w_{z,k}:=\mathrm{mex}(S_u)\),以此不断寻找。注意到边的染色是 \(\mathrm{mex}(S_u),\mathrm{mex}(S_v),\mathrm{mex}(S_u),\mathrm{mex}(S_v),\cdots\) 交替的,没有奇圈所以最后必定不矛盾。
-
Landau's Theorem:存在竞赛图 \(G=(V,E)\),其中 \(|V|=n\),使得其对应出度序列为 \(d_1\leq d_2 \leq \cdots \leq d_n\) 当且仅当:
- \(\sum \limits_{i=1}^n d_i=\dbinom{n}{2}\)。
- \(\forall 1 \leq i \leq n: \sum \limits_{j=1}^i d_j \geq \dbinom{i}{2}\)。
同时成立。
-
Erdős–Gallai Theorem:存在简单无向图 \(G=(V,E)\) 使得 \(|V|=n\) 且度数序列为 \(d_1\geq d_2\geq \cdots \geq d_n\) 当且仅当:
- \(2 \mid \sum \limits_{i=1}^n d_i\)。
- \(\forall 1 \leq i \leq n: \sum \limits_{j=1}^i d_j \leq i(i-1)+\sum \limits_{j=i+1}^n \min(d_j,i)\)。
同时成立。
-
Gale–Ryser Theorem:存在简单无向二部图 \(G=(X,Y,E)\) 使得 \(|X|=n,|Y|=m\) 且度数序列分别为 \(a_1\geq a_2 \geq \cdots \geq a_n\) 与 \(b_1,b_2,\cdots,b_m\) 当且仅当:
- \(\sum \limits_{i=1}^n a_i=\sum \limits_{i=1}^m b_i\)。
- \(\forall 1 \leq i \leq n:\sum \limits_{j=1}^i a_j \leq \sum \limits_{j=1}^m \min(b_j,i)\)。
同时成立。
-
Ear decomposition:
对于图 \(G=(V,E)\) 的一个子图 \(G'=(V',E')\),考虑简单路径或简单环 \(P:v_1,v_2,\cdots,v_k\),其中 \(k \geq 2\),\(v_1,v_k \in V'\) 且 \(\forall i\in[2,k):v_i \notin V'\),则称 \(P\) 为 \(G'\) 的一个耳。若 \(v_1\neq v_k\),即 \(P\) 是简单路径,称 \(P\) 为 \(G'\) 的一个开耳。
(开)耳分解:
对于图 \(G=(V,E)\),考虑连通图序列 \((G_0,G_1,\cdots,G_n)\),其中 \(G_i=(V_i,E_i)\),满足:
- \(G_0\) 是一个简单环或者单点。
- \(G_n=G\)。
- \(\forall i \in [1,n]: G_{i-1} \subseteq G_i\)。
- \(\forall i \in [1,n]: E_i \setminus E_{i-1}\) 为 \(G_{i-1}\) 的一个(开)耳。
则称 \((G_0,G_1,\cdots,G_n)\) 为图 \(G=(V,E)\) 的(开)耳分解。
结论:
- 简单无向图 \(G=(V,E)\) 存在耳分解当且仅当其边双连通。
- 点数至少为 \(3\) 的简单无向图 \(G=(V,E)\) 存在开耳分解当且仅当其点双连通。
-
Bipolar orientation:
对于无向图 \(G=(V,E)\) 和其上两个不同节点 \(s,t\),下列四个命题等价:
- 加入无向边 \((s,t)\) 后,\(G'=(V,E\cup \{(s,t)\})\) 点双连通。
- \(G\) 的圆方树方点构成一条链,\(s,t\) 是一条直径端点。
- 存在给图 \(G\) 的无向边定向的方法,得到一个 DAG,\(s\) 入度为 \(0\),\(t\) 出度为 \(0\),且其余所有点出入度均不为 \(0\)。
- 存在所有点的排列 \(p_1,p_2,\cdots,p_n\),使得 \(p_1=s,p_n=t\),且任意前后缀的导出子图连通。
Proof:
先说明命题 \(3\) 和 \(4\) 的等价性。
\(3 \Rightarrow 4\):任取 \(3\) 中的 DAG 的一个拓扑序作为 \(4\) 的排列 \(p\)。显然前后缀导出子图均连通。
\(4 \Rightarrow 3\):对于 \(4\) 中求得的一个排列 \(p\),考虑 \(3\) 中对边定向的方式,对于无向边 \((u,v)\),按照 \(p\) 内所处位置从小到大定向,不难说明其满足命题 \(3\) 要求条件。
命题 \(1\) 和 \(2\) 显然等价,原因是加边对应在圆方树上相当于将一条路径缩合。
接下来说明 \(1 \Rightarrow 3\):
由于图 \(G'=(V,E\cup \{(s,t)\})\) 点双连通,故可以求出其一个开耳分解。可以证明存在开耳分解使得 \((s,t)\in G_0\),\(G_0\) 为一个环。将非 \((s,t)\) 边按照环的方向定向为 \(s \rightarrow t\),边 \((s,t)\) 定向为 \(s\rightarrow t\)。依次加入开耳 \(v_1=a,v_2,v_3,\cdots,v_{k-1},v_k=b\) 时,若图中 \(a\) 可达 \(b\),则按路径定向为 \(a \rightarrow b\),否则按路径定向为 \(b \rightarrow a\),显然新加入的点的入度出度均非 \(0\),且仍然满足 DAG 性质。
最后考虑 \(4 \Rightarrow 1\):
即证 \(\neg 1 \Rightarrow \neg 4\)。
如果加入 \((s,t)\) 后 \(G'\) 不连通,显然存在割点 \(u\) 使得删去 \(u\) 后存在一个连通块不同时包含 \(s,t\),记其为 \(S\)。若存在满足命题 \(4\) 的排列 \(p_1,p_2,\cdots,p_n\),考虑 \(S \cup \{u\}\) 在排列中出现最早的为点 \(x\),显然 \(x \neq u\) 或 \(y \neq u\)。若 \(x \neq u\),考虑排列的前缀 \([1,x]\)。删去 \(u\) 后 \(s\) 和 \(x\) 不连通,而这个前缀并不包含 \(u\),与命题 \(4\) 矛盾。若 \(x=u\) 同理考虑后缀 \([y,n]\)。
故 \(\neg 1 \Rightarrow \neg 4\),即 \(4 \Rightarrow 1\)。
\(\square\)
字符串
下文字符串下标编号从 \(1\) 开始,\(st\) 表示在 \(s\) 后面拼接 \(t\)。
-
\(s\) 有长度为 \(l\) 的 Border 等价于 \(s\) 有长度为 \(|s|-l\) 的周期,均等价于 \(\forall i \in [1,l]:s_i=s_{i+|s|-l}\)。
-
Fine and Wilf's Theorem:若字符串 \(s\) 具有周期 \(p,q\),且 \(|s| \geq p + q - \gcd(p,q)\),则其具有周期 \(\gcd(p,q)\)。其也被称为强周期引理或 Periodicity Lemma。
-
\(s^{+\infty} \lessgtr t^{+\infty} \iff st\lessgtr ts\)。
-
设字符串 \(s\) 最小周期为 \(p\),则对于所有其他周期 \(x\) 满足 \(x \leq \dfrac{|s|}{2}\),有 \(p\mid x\)。反之 \(p+x \leq |s|\),存在长度为 \(\gcd(p,x)\) 的周期。
-
若字符串 \(s\) 循环移位 \(0<k<|s|\) 步后得到 \(\mathrm{rot}_k(s)=s\),则 \(s\) 存在非平凡整周期。
Proof:
\(\mathrm{rot}_k(s)=s \iff s_i=s_{i+k}\),下标按 \(\bmod \, n\) 意义理解。
故 \(k\) 为循环周期。\(s\) 存在长度为 \(k\) 的循环周期则存在长度为 \(\gcd(|s|,k)\) 的循环周期。根据 Bézout's identity 不难说明这一点。故 \(\gcd(|s|,k)\) 为一个非平凡整周期。
\(\square\)
-
非空字符串 \(s\) 不存在非平凡整周期 \(\iff\) \(s\) 不在串 \((s+s)[2\cdots 2|s|-1]\) 中作为子串出现。
-
字符串本质不同回文子串数量为 \(O(n)\)。
-
若 \(st=ts\),则存在 \(u\) 使得 \(s=u^a\),\(t=u^b\)。
-
字符串 \(s\) 的所有长度至少为 \(\dfrac{|s|}{2}\) 的 Border 长度构成等差数列。
Proof:
根据周期与 Border 的等价性,即证所有长度不超过 \(\dfrac{|s|}{2}\) 的周期是等差数列。
根据 Fine and Wilf's Theorem 推论,所有长度不超过 \(\dfrac{|s|}{2}\) 的周期是最小周期 \(p_0\) 的整数倍。
显然若 \(p\) 为周期,则 \(\forall k \in \mathbb{Z^+}\),\(kp\) 也为周期。故所有 \(\leq \dfrac{|s|}{2}\) 的周期形如 \(p_0,2p_0,3p_0,\cdots\) 为等差数列,故 \(n-p_0,n-2p_0,n-3p_0,\cdots\) 为等差数列。
\(\square\)
-
字符串 \(s\) 所有 Border 可以被表示为 \(\pi_{|s|},\pi_{\pi_{|s|}},\cdots\)。其中 \(\pi_i\) 为 KMP 求出的 \(s[1\cdots i]\) 的最长非平凡 Border。据此可以建立失配树,\(\pi_i \rightarrow i\)。
进一步,串 \(s\) 的两个不同长度 Border \(p\) 和 \(q\),其中 \(|p| < |q|\),则 \(p\) 必为 \(q\) 的 Border。
-
字符串 \(s\) 的所有 Border 可以被划分为 \(O(\log |s|)\) 个等差数列。长度属于区间 \((2^i,2^{i+1}]\) 的所有 Border 构成等差数列。
Proof:
区间内最短长度的 Border 至少为最长 Border 的一半,根据 \(9\) 可知其构成等差数列。
\(\square\)
-
定义字符串 \(t\) 为重复串当且仅当其存在一个长度不超过一半的周期。
对于字符串 \(s\),定义 run 为其一个子串 \(s[l\cdots r]\),其是一个重复串且向两侧均不能扩展。
Maximum repetition theorem,a.k.a the runs theorem:
runs 的数量为 \(O(|s|)\),更紧的上界是 \(\dfrac{22}{23}|s|\)。
-
有个众所周知题叫做优秀的拆分。其揭示了一种题目解决方法:定长分块。
-
对 SA 出来的 height 建笛卡尔树很多时候能解决问题,因为其本质类似后缀树。
数论
-
素数个数 \(\pi(n) \sim \dfrac{n}{\ln(n)}\),\(\pi(n)\) 为 \([1,n]\) 内素数个数。
-
对于任意 \(\epsilon > 0\),\(d(n)=o(n^{\epsilon})\)。\(d(n)\) 为约数个数函数。
-
OI 范围内复杂度分析中,通常将 \([1,n]\) 中约数个数最大的数的约数个数看作 \(O(n^{\frac{1}{3}})\)。
-
\(\sum \limits_{d|n} \varphi(d)=n\)。
Proof:
设 \(f(x):=\sum \limits_{i=1}^n [\gcd(i,n)=x]\)。有 \(n=\sum \limits_{i=1}^n f(i)\)。
显然 \(f(i)=\varphi(\dfrac{n}{i})\)。故 \(n=\sum \limits_{d\mid n}\varphi(\dfrac{n}{d})=\sum \limits_{d \mid n} \varphi(d)\)。
\(\square\)
-
\(\varphi(n) = n\prod \limits_{p\mid n} (1-\dfrac{1}{p})\)。原因是依次考虑 \(n\) 的所有质因数 \(p_1,p_2,\cdots,p_k\),对于每个 \(i\),不是 \(p_1,p_2,\cdots,p_{i-1}\) 的倍数的所有数中,恰有 \(\dfrac{1}{p_i}\) 的数是 \(p_i\) 的倍数。
-
\(\varphi\) 是积性函数。
Proof:
即证 \(\forall \gcd(a,b)=1: \varphi(ab)=\varphi(a)\varphi(b)\)。
根据 \(\varphi(n) = n\prod \limits_{p\mid n} (1-\dfrac{1}{p})\) 不难说明这一点。
\(\square\)
-
\(\varphi(p^k) = p^k-p^{k-1}\)。
-
\(2 \nmid n \Rightarrow \varphi(2n)=\varphi(n)\)。
-
\(\gcd(a,b)=\sum \limits_{d\mid a, d\mid b} \varphi(d)\)。
-
Fermat's little theorem:设 \(p \in \mathbb{P}\),\(\forall a \in \mathbb{Z}: a^p\equiv a\pmod p\)。
-
Euler's theorem:\(\gcd(a,n)=1\Rightarrow a^{\varphi(n)}\equiv 1 \pmod n\)。
Proof:
考虑模 \(n\) 整数乘法群,阶为 \(\varphi(n)\),任何元素的阶整除群的阶,故 \(a^{\varphi(n)}\equiv 1 \pmod n\)。
\(\square\)
-
Extended Euler's Theorem:
\(a^k\equiv \begin{cases}a^k && k < \varphi(m)\\ a^{k \bmod \varphi(m)+\varphi(m)} && k \geq \varphi(m) \end{cases} \pmod m\)
-
Bézout's identity:
设 \((a,b)=d\),存在整数 \(x,y\) 使得 \(ax+by=d\)。
Proof:
根据扩展欧几里得算法容易构造。即每次 \((a,b)\rightarrow (b,a\bmod b)\),解 \((x,y)\) 可以根据 \((b,a\bmod b)\) 的解构造。
\(\square\)
-
线性同余方程设一个未知量 \(k\) 后,使用扩展欧几里得算法求解。
-
Chinese remainder theorem:
考虑一元线性同余方程组:
\( \begin{cases} x \equiv a_1 \pmod {n_1} \\ x \equiv a_2 \pmod {n_2} \\ \vdots \\ x \equiv a_k \pmod {n_k} \\ \end{cases} \)
其中 \(n_1,n_2,\cdots,n_k\) 两两互质。则在模 \(N=n_1n_2\cdots n_k\) 意义下有唯一解。
Proof:
只需证明 \(k=2\),然后两两合并即可。
即证一元线性同余方程组:
\(\begin{cases} x \equiv a_1 \pmod {n_1} \\ x \equiv a_2 \pmod {n_2} \end{cases}\)
当 \(\gcd(n_1,n_2)=1\) 时,方程组在模 \(n_1n_2\) 意义下有唯一解。
设 \(x=n_1k+a_1\),代入第二个式子有 \(n_1k+a_1\equiv a_2 \pmod {n_2}\),也就是说 \(n_1k\equiv a_2 - a_1 \pmod {n_2}\)。
由于 \(\gcd(n_1,n_2)=1\),故 \(k\equiv (a_2-a_1)n_1^{-1}\pmod {n_2}\)。令 \(w:=(a_2-a_1)n_1^{-1} \bmod n_2\)。
则 \(k=w+n_2k'\)。
代入 \(x=n_1k+a_1\) 则有 \(x=n_1(w+n_2k')+a_1=n_1w+n_1n_2k'+a_1\)。其中 \(w,n_1,a_1\) 均为定值,故 \(x \equiv n_1w+a_1 \pmod {n_1n_2}\)。
\(\square\)
-
\(4 \times 10^{18}\) 范围内哥德巴赫猜想成立。
-
Bertrand's postulate:对任意大于 \(1\) 的整数 \(n\),存在质数 \(p \in (n,2n)\)。
-
Sylvester–Schur theorem:设整数 \(n > k \geq 1\),则存在整数 \(x \in [n,n+k-1]\),使得其最大质因子大于 \(k\)。
-
\(\sum \limits_{d \mid n} \mu(d)=[n=1]\)。
其中莫比乌斯函数 \(\mu(n)\) 定义为:
\(\mu(n)=\begin{cases}0 && \exists p \in \mathbb{P}: p^2 \mid n \\ (-1)^{\omega(n)} && \text{otherwise} \end{cases}\)
其中 \(\omega\) 为质因数个数函数。
Proof:
据定义知 \(\mu(1)=1\)。
即证 \(\forall n > 1: \sum \limits_{d \mid n} \mu(d)=0\)。
观察 \(n\) 分解质因数 \(n=p_1^{\alpha_1}\cdots p_k^{\alpha_k}\)。
\(d \mid n\) 且 \(\mu(d) \neq 0\) 当且仅当 \(d\) 对应每个 \(p_i\) 的幂次小于等于 \(1\)。
故 \(\sum \limits_{d \mid n} \mu(d) = \sum \limits_{i=0}^k (-1)^i\dbinom{k}{i}=(1-1)^k = 0\)。
\(\square\)
-
Möbius inversion formula:
若函数 \(g(n)=\sum \limits_{d \mid n} f(d)\) 对于大于等于 \(1\) 的整数 \(n\) 成立。
则 \(f(n)=\sum \limits_{d \mid n}\mu(d)g(\dfrac{n}{d})\) 对于大于等于 \(1\) 的整数 \(n\) 成立。
Proof:
\(\sum \limits_{d \mid n}\mu(d)g(\dfrac{n}{d})=\sum \limits_{d \mid n} \mu(d)\sum \limits_{x \mid \frac{n}{d}}f(x)=\sum \limits_{d \mid n}\mu(\dfrac{n}{d})\sum \limits_{x \mid d} f(x)=\sum \limits_{x \mid n}f(x)\sum \limits_{x \mid d \mid n} \mu(\dfrac{n}{d})=\sum \limits_{x\mid n}f(x)\sum \limits_{d \mid \frac{n}{x}} \mu(d)=\sum \limits_{x \mid n} f(x)[x=n]=f(n)\)。
\(\square\)
-
Legendre's formula:
\(v_p(n!)=\sum \limits_{k \geq 1} \lfloor \dfrac{n}{p^k}\rfloor\)。
其中 \(v_p(n)\) 为 \(n\) 素因子分解中 \(p\) 的幂次,即最大的 \(k\) 使得 \(p^k \mid n\) 且 \(p^{k+1} \nmid n\)。
证明显然。
-
Wilson's theorem:
大于 \(1\) 的正整数 \(n\) 为质数当且仅当 \((n-1)! \equiv -1 \pmod n\)。
-
Kummer's theorem:
质数 \(p\) 在 \(\dbinom{n}{m}\) 的最高幂次等于 \(p\) 进制下 \(m\) 加 \(n-m\) 的进位次数。
Proof:
\(v_p\left(\dbinom{n}{m}\right) = v_p\left(\dfrac{n!}{m!(n-m)!}\right)=v_p(n!)-v_p(m!)-v_p\left((n-m)!\right)=\sum \limits_{k\geq 1} \lfloor \dfrac{n}{p^k}\rfloor-\lfloor \dfrac{m}{p^k}\rfloor-\lfloor \dfrac{(n-m)}{p^k}\rfloor\)。
\(\square\)
-
Lucas's theorem:
对于素数 \(p\),\(\dbinom{n}{m} \equiv \dbinom{\lfloor \frac{n}{p}\rfloor}{\lfloor \frac{m}{p}\rfloor}\dbinom{n \bmod p}{m \bmod p}\pmod p\)。
-
\(O(V)-O(1)\) 在线 GCD:
我们要做到 \(O(V)\) 预处理 \(O(1)\) 查询 \(\gcd(x,y)\),其中 \(1 \leq x,y \leq V\)。
Lemma:
对于任意正整数 \(n\),存在正整数 \(a \leq b \leq c\) 使得 \(n=abc\),其中 \(c \leq \sqrt{n}\) 或 \(c\) 为素数。
Proof:
对 \(n\) 归纳证明。
记 \(a_n,b_n,c_n\) 为 \(n\) 的一个可行分解。显然有 \(a_n \leq \sqrt[3]{n}\)。
\(n=1\) 时取 \(a_1=b_1=c_1=1\)。
\(n>1\) 时,令 \(p\) 为 \(n\) 的最小素因子,取 \(a_n,b_n,c_n\) 为 \(a_{\frac{n}{p}} \times p,b_{\frac{n}{p}},c_{\frac{n}{p}}\) 从小到大排序的结果即可。原因如下:
- \(n\) 为素数时,\(a_n=b_n=1,c_n=n\) 符合条件。
- \(p \leq \sqrt[4]{n}\) 时,\(a_{\frac{n}{p}}\leq \sqrt[3]{\frac{n}{p}}\),那么 \(a_{\frac{n}{p}}\times p \leq \sqrt[3]{np^2} \leq \sqrt[3]{n^{\frac{3}{2}}} \leq \sqrt n\)。
- 若 \(a_{\frac{n}{p}}=1\),则 \(a_n=p\leq \sqrt n\)。否则 \(a_{\frac{n}{p}}>1\),\(a_{\frac{n}{p}},b_{\frac{n}{p}},c_{\frac{n}{p}}\) 为 \(\frac{n}{p}\) 的三个大于 \(1\) 的因子,必有 \(\frac{n}{p}\) 的最小素因子大于等于 \(p\),故 \(a_{\frac{n}{p}} > \sqrt[4]{n}\),\(p\times a_{\frac{n}{p}}\times b_{\frac{n}{p}}\times c_{\frac{n}{p}} > (\sqrt[4]{n})^4 = n\) 与 \(p\times a_{\frac{n}{p}}\times b_{\frac{n}{p}} \times c_{\frac{n}{p}}=n\) 矛盾。故此情况不成立。
\(\square\)
通过线性筛和上文的归纳构造不难在 \(O(V)\) 复杂度内求出 \([1,V]\) 内所有数的分解。
计算 \(\gcd(x,y)\) 时,考虑 \(x=a_xb_xc_x\),依次计算形如 \(a_x,b_x,c_x\) 与一个数的 \(\gcd\)。预处理 \([1,\sqrt V]\times [1,\sqrt V]\) 内任意两个数 \(\gcd\)。如果 \(c_x \leq \sqrt n\) 可以查表。否则 \(c_x \in \mathbb{P}\) 不难直接求出答案。
-
\(\varphi(\mathrm{lcm}(i,j))=\dfrac{\varphi(i)\varphi(j)}{\varphi(\gcd(i,j))}\)。
-
\(\dbinom{n}{m} \equiv 1 \pmod 2 \iff m \subseteq n\),其中 \(m\subseteq n\) 表示二进制下 \(m\) 包含于 \(n\)。Lucas's theorem 易证。
-
\(\begin{Bmatrix} n \\ m \end{Bmatrix}\equiv \dbinom{n-m+\lceil \frac{m}{2}\rceil-1}{\lceil \frac{m}{2}\rceil-1} \pmod 2\)。

浙公网安备 33010602011771号