数学笔记
To Do List
补完那些咕着的东西
组合计数相关
排列组合tricks
1、\(C_{n}^{a_1,a_2,...,a_k}=\frac{n!}{a_1!a_2!...a_k!}\)(暴力拆开)
2、\(C_n^i=C_{n-1}^i+C_{n-1}^{i-1}\)(n个里选i个,第i个不选+第i个选的情况)(杨辉三角)
3、\(\sum_{j=i}^{n}(-1)^{j-i}C_n^j=C_{n-1}^{i-1}\)(先设\(p_i=C_n^i\),然后把\(p_i\)用2中的式子拆成3项,递归地证明)
4、\(\sum_{i=0}^{n} (-1)^i C_{n}^{i} = [n=0]\)
5、\(\sum_{i=0}^{n} C_{n}^{i} = 2^n\)
卡特兰数(咕)
斯特林数(咕)
多项式相关
多项式板子
1、多项式求逆
暴力展开,两边同乘\(F(x)\)即可得证。
2、多项式ln
对复合函数求导,即可得证。
3、多项式exp
了解\(e^x\)的泰勒展开,即可得证。
4、多项式带余除法
暴力展开、凑一凑,即可得证。
其中,对于多项式\(A(x)\),有\(A_R(x)=x^nA(\frac{1}{x})\)
5、多项式开根
暴力展开,即可得证。
特殊多项式卷积
多项式tricks
1、对于\(F(x)=\sum f_i x^i\),若\(f_i=\sum a_j b_{i+j}\),那么将\(b\)序列反向成为新序列\(b'\),就可以变成\(f_i=\sum a_j b'_{n-i-j}\),可以卷积
2、\(\prod F(x)=\exp(\ln(\prod F(x)))=\exp(\sum\ln(F(x)))\)
3、\(\frac{1}{1-x}=\sum_{i=0}^{\infty} x^i\)(大除法)
拓展:\(\frac{1-x^{n+1}}{1-x}=\sum_{i=0}^n x^i\)
4、\(x^{(k+b)}\operatorname{mod}(x^k-1)=x^b\)(大除法)
对于上面的这条式子(循环卷积),若它在\(\operatorname{mod p}\)意义下进行且\(\operatorname{p mod k}=1\),则可以选择类似FFT的方法,设\(g\)为\(p\)的原根,则单位根为\(gn=g^{(p-1)/k}\),带入、直接相乘即可(即,FFT在位数不够的时候就是循环卷积)
5、乘法变加法:取log、取原根
拉格朗日插值
设我们要求一个n次多项式,则容易证明代入n+1个点值\((x_i,y_i)\)即可唯一确定该多项式。
于是有:\(f(x)=\sum_{i=1}^n y_i \prod_{j≠i}\frac{x-x_j}{x_i-x_j}\)
拉格朗日反演
自然数幂求和
1、模数为质数但不为NTT质数,n、k均给定
设\(S_k(n)=\sum_{i=1}^{n} i^k\)。
利用多次差分,每次消掉最高项,可以证明\(S_k(n)\)是一个\(k+1\)次多项式,于是我们可以代入\(k+2\)个点值来求解。
为了让代入的东西便于计算,我们代入\(1\)~\(k+2\)。
于是根据拉格朗日插值:
对于求\(i^k\),我们可以利用筛法求质数的时候求出,复杂度可以达到\(\leq O(k)\)。
2、模数为NTT质数,n给定,询问k=0~K的答案。
设 \(S_k(n)=\sum\limits_{i=0}^ni^k\)。
那么我们求出一个与 \(S_k(n)\) 有关的生成函数:
注意到 \(e^x\) 的泰勒展开为:\(e^x=1+\dfrac{x}{1!}+\dfrac{x^2}{2!}+\cdots\),故原式为:
注意到 \(\dfrac{1}{1-x}=1+x+x^2+\cdots\),有 \(1+x+x^2+\cdots+x^n=\dfrac{1-x^{n+1}}{1-x}\)。
那么原式即为:
多项式求逆即可。
最后得到的系数记得乘上个 \(k!\) 才是 \(S_k(n)\)。
时间复杂度 \(O(K\log K)\)。
矩阵相关
矩阵树定理
1、基尔霍夫矩阵
\(K=D-A\),其中A为邻接矩阵,D为度数矩阵。
2、求解
基尔霍夫矩阵可以用于求带标号生成树个数。
无根树:去掉任意一行一列之后求K的行列式即为答案。
有根树:去掉\(root\)行\(root\)列。
内向树:度数矩阵变为出度矩阵。
外向树:度数矩阵变为入度矩阵。
3、tips
边权可以有值,可以统计出所有生成树的边权乘积的和。
这个值甚至可以为一个\(x\),然后变成一个多项式。
4、例题
XSY3918 数数
特征多项式(咕)
常系数线性递推
1、前置知识:Cayley-Hamilton 定理
考虑转移矩阵:
令其特征多项式\(f(\lambda)=|I \cdot \lambda - A|\),显然是一个k次的多项式(做题的时候可能要手动拆出来)
则\(f(A)=0\)
2、完整步骤
考虑初始矩阵为
其中\(b\)即为我们要求的数列。
则显然递推\(n\)步后的答案是\(b_{n}=(GA^{n})_{0,0}\)
考虑到\(f(A)=0\),那么设\(F(A)=A^n\),显然我们可以把\(F(A)\)无限次减去\(f(A)\),一直到\(F(A)\)变为k次以内,这个操作类似于取模
也就是有\(F(A)=F(A)\operatorname{mod}f(A)\)
令\(H(A)=F(A)\operatorname{mod}f(A)\),于是它的形式可以为\(H(A)=\sum_{i=0}^{k-1} h_i A^i\)
于是,
其中\(h_i\)可以使用多项式快速幂(取模)来求出。这部分是\(O(k \log k \log m)\)的。
而\(b_i\)在没有方便的方法求出来的情况下只能\(O(k^2)\),瓶颈很可能在这里。做题的时候多注意一下。
3、例题
XSY3915 数学作业
容斥相关
多步容斥
众所周知的多步容斥公式:
\(|A_1 \cup A_2 \cup \cdots \cup A_n| = \sum_{i=1}^n |A_i| - \sum_{1 \leq i,j \leq n} |A_i \cap A_j| + \cdots + (-1)^{n-1} |A_1 \cap A_2 \cap \cdots \cap A_n|\)
证明:考虑一个元素被m个集合包含时,它对左边的贡献是1。
那么它对右边的贡献为:\(\sum_{i=1}^{m} (-1)^{i-1} C_{m}^{i} = \sum_{i=0}^{m} (-1)^{i-1} C_{m}^{i} + C_{m}^{0} = 1\)
于是原式成立。
二项式定理
1、原始形式
众所周知,补集的交集就是并集的补集,于是我们令\(A^c\)代表\(A\)的补集,\(S\)为全集,可以将上面的式子变形:
\(|A^c_1 \cap A^c_2 \cap \cdots \cap A^c_n| = |S| - \sum_{i=1}^n |A_i| + \sum_{1 \leq i,j \leq n} |A_i \cap A_j| - \cdots + (-1)^{n} |A_1 \cap A_2 \cap \cdots \cap A_n|\)
同理,我们把补集换为原集,则有:
\(|A_1 \cap A_2 \cap \cdots \cap A_n| = |S| - \sum_{i=1}^n |A^c_i| + \sum_{1 \leq i,j \leq n} |A^c_i \cap A^c_j| - \cdots + (-1)^{n} |A^c_1 \cap A^c_2 \cap \cdots \cap A^c_n|\)
考虑令\(f(i)\)为\(i\)个补集的交集大小,\(g(i)\)为\(i\)个原集的交集大小,根据上式,则可以得到:
\(f(n) = \sum_{i=0}^{n} (-1)^{i} C_{n}^{i} g(i) \Leftrightarrow g(n) = \sum_{i=0}^{n} (-1)^i C_{n}^{i} f(i)\)
2、变式
常见变换一:
\(f(n)=\sum_{i=0}^{n} C_{n}^{i} g(i) \Leftrightarrow g(n) = \sum_{i=0}^{n} (-1)^{n-i} C_{n}^{i} f(i)\)
把原始的\(g(i)\)换成\((-1)^i g(i)\)即可证明。
常见变换二(重点!):
\(f(n)=\sum_{i=n}^{m} C_{i}^{n} g(i) \Leftrightarrow g(n) = \sum_{i=n}^{m} (-1)^{i-n} C_{i}^{n} f(i)\)
证明:
证毕。
3、例题
loj6358 前夕,其中需要用到单位根反演。
XSY3996 棋盘染色
单位根反演
\(\forall k,有[n \mid k]=\frac{1}{n} \sum_{i=0}^{n-1} \omega_{n}^{ik}\)
证明:
显然,当\(n \mid k\)时,\(ik\)为\(n\)的倍数,右边式子即为\(\frac{1}{n} \times n = 1\)
而\(n \nmid k\)时,后面的式子是一个等比数列求和,可以发现分子始终为0。
min-max容斥
1、一般形式:
\(\max (S)=\sum_{T \subseteq S} (-1)^{|T|-1} \min (T)\)
\(\min (S)=\sum_{T \subseteq S} (-1)^{|T|-1} \max (T)\)
前提是集合中元素不相等(若相等则加入eps扰动即可)
只证第一条式子。
考虑从大到小排序,则第一名就是我们要求的\(max(S)\)。
考虑当一个元素为第\(k(k>1)\)名时,它对右边式子的贡献,可以发现就是当\(T\)中元素除了它自己以外都比它小的时候有贡献。
容易发现,对于比它小的元素,组成的集合中大小为奇数与大小为偶数的集合个数是相同的,所以可以抵消。
只有第一名的时候,只能为空集,没法抵消。于是左右两边相等。
2、广义min-max容斥
\(kth\max (S)=\sum_{T \subseteq S} (-1)^{|T|-k} C_{|T|-1}^{k-1} \min (T)\)
\(kth\min (S)=\sum_{T \subseteq S} (-1)^{|T|-k} C_{|T|-1}^{k-1} \max (T)\)
同样只证第一条式子。
我们要构造一个系数\(f\),使得它满足\(kth\max (S)=\sum_{T \subseteq S} f(|T|) \min(T)\)。
我们考虑每个值的贡献,设它从大到小排名为\(x\),则它的贡献是
\([x==k] = \sum_{i=0}^{x-1} C_{x-1}^{i} f(i+1)\),这个就是钦定比它小的集合的子集,然后代入系数\(f\)。
令\(g(x) = [x==k-1]\),\(h(x)=f(x+1)\),则原式可以表达为:
\(g(x-1) = \sum_{i=0}^{x-1} C_{x-1}^{i} h(i)\),不难发现这是一个二项式反演的形式,于是有:
原式得证。
- 上述的式子可以套到期望里面,如下面的例题。
3、例题
Luogu4707 重返现世
bzoj4036 按位或
数论相关
BSGS(咕)
莫比乌斯反演(咕)
杜教筛(咕)
min_25筛
扩展欧拉定理(咕)
其它
牛顿迭代
考虑对于一个递增或递减函数\(f(x)\),我们要求它的零点。
那我们随便取一个初值\(x_0\)(与零点越相近越好),然后每次作过\((x_0,f(x_0))\)的\(f(x)\)的切线。容易得到其切线方程为\(y=f'(x_0)(x-x_0)+f(x_0)\)。
将这个切线方程的零点作为下一个\(x_0\),不断重复上述过程,然后在精度满足条件的时候就可以得到答案。