数学笔记

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、多项式求逆

\[\begin{aligned} G(x) &= 2 \times G_0(x) - F(x) \times G_0(x) \times G_0(x) \pmod {x^n} \end{aligned} \]

暴力展开,两边同乘\(F(x)\)即可得证。

2、多项式ln

\[\begin{aligned} G'(x)=\frac{F'(x)}{F(x)} \end{aligned} \]

对复合函数求导,即可得证。

3、多项式exp

\[\begin{aligned} G(x)=G_0(x)(1-\ln(G_0(x))+F(x)) \pmod {x^n} \end{aligned} \]

了解\(e^x\)的泰勒展开,即可得证。

4、多项式带余除法

\[\begin{aligned} Q_R(x)=\frac{F_R(x)}{G_R(x)} \end{aligned} \]

暴力展开、凑一凑,即可得证。

其中,对于多项式\(A(x)\),有\(A_R(x)=x^nA(\frac{1}{x})\)

5、多项式开根

\[\begin{aligned} G(x)=\frac{F(x)+G_0(x) \times G_0(x)}{2 \times G_0(x)} \end{aligned} \]

暴力展开,即可得证。

特殊多项式卷积

FWT

多项式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}\)

拉格朗日反演

click here

自然数幂求和

1、模数为质数但不为NTT质数,n、k均给定

\(S_k(n)=\sum_{i=1}^{n} i^k\)

利用多次差分,每次消掉最高项,可以证明\(S_k(n)\)是一个\(k+1\)次多项式,于是我们可以代入\(k+2\)个点值来求解。

为了让代入的东西便于计算,我们代入\(1\)~\(k+2\)

于是根据拉格朗日插值:

\[\begin{aligned} S_k(n)&=\sum_{i=1}^{k+2} i^k \prod_{j≠i} \frac{n-j}{i-j}\\ &=\sum_{i=1}^{k+2}(-1)^{k+2-i} i^k \frac{\prod_{j=1}^{i-1}(n-j) \prod_{j=i+1}^{k+2}(n-j)}{(i-1)!(k+2-i)!} \end{aligned} \]

对于求\(i^k\),我们可以利用筛法求质数的时候求出,复杂度可以达到\(\leq O(k)\)

2、模数为NTT质数,n给定,询问k=0~K的答案。

\(S_k(n)=\sum\limits_{i=0}^ni^k\)

那么我们求出一个与 \(S_k(n)\) 有关的生成函数:

\[\begin{aligned} &\sum_{k=0}^KS_k(n)\frac{1}{k!}x^k\\ =&\sum_{k=0}^K\sum_{i=0}^n i^k\frac{1}{k!}x^k\\ =&\sum_{i=0}^n\sum_{k=0}^K \frac{(ix)^k}{k!} \end{aligned} \]

注意到 \(e^x\) 的泰勒展开为:\(e^x=1+\dfrac{x}{1!}+\dfrac{x^2}{2!}+\cdots\),故原式为:

\[=\sum_{i=0}^ne^{ix}\pmod {x^{K+1}} \]

注意到 \(\dfrac{1}{1-x}=1+x+x^2+\cdots\),有 \(1+x+x^2+\cdots+x^n=\dfrac{1-x^{n+1}}{1-x}\)

那么原式即为:

\[\begin{aligned} =&\sum_{i=0}^n(e^x)^i\pmod {x^{K+1}}\\ =&\frac{1-e^{(n+1)x}}{1-e^x}\pmod {x^{K+1}}\\ =&\frac{e^{(n+1)x}-1}{e^x-1}\pmod {x^{K+1}}\\ =&\cfrac{\cfrac{(n+1)x}{1!}+\cfrac{(n+1)^2x^2}{2!}+\cfrac{(n+1)^3x^3}{3!}+\cdots}{\cfrac{x}{1!}+\cfrac{x^2}{2!}+\cfrac{x^3}{3!}+\cdots}\pmod {x^{K+1}}\\ =&\cfrac{(n+1)+\cfrac{(n+1)^2}{2!}x+\cfrac{(n+1)^3}{3!}x^2+\cdots}{1+\cfrac{1}{2!}x+\cfrac{1}{3!}x^2+\cdots}\pmod {x^{K+1}}\\ =&\cfrac{(n+1)+\cfrac{(n+1)^2}{2!}x+\cdots+\cfrac{(n+1)^{K+1}}{(K+1)!}x^{K}}{1+\cfrac{1}{2!}x+\cdots+\cfrac{1}{(K+1)!}x^{K}}\\ \end{aligned} \]

多项式求逆即可。

最后得到的系数记得乘上个 \(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 定理

考虑转移矩阵:

\[A= \left[ \begin{matrix} a_1 & a_2 & \cdots & a_k\\ 1 & 0 & \cdots & 0 \\ \vdots & \ddots & \ddots & \vdots \\ 0 & \cdots & 1 & 0 \end{matrix} \right] \]

令其特征多项式\(f(\lambda)=|I \cdot \lambda - A|\),显然是一个k次的多项式(做题的时候可能要手动拆出来)

\(f(A)=0\)

2、完整步骤

考虑初始矩阵为

\[G= \left[ \begin{matrix} b_0\\ 0\\ \vdots\\ 0\\ \end{matrix} \right] \]

其中\(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\)

于是,

\[\begin{aligned} ans &= (GA^{n})_{0,0} \\ &= (G \cdot F(A))_{0,0}\\ &= (G \cdot H(A))_{0,0}\\ &= (G \sum_{i=0}^{k-1} h_i A^i)_{0,0}\\ &= (\sum_{i=0}^{k-1} h_i G \cdot A^i)_{0,0}\\ &= \sum_{i=0}^{k-1} h_i (G \cdot A^i)_{0,0}\\ &= \sum_{i=0}^{k-1} h_i b_i \end{aligned} \]

其中\(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)\)

证明:

\[\begin{aligned} f(n)&=\sum_{i=n}^{m} C_{i}^{n} g(i)\\ &=\sum_{i=n}^{m} C_{i}^{n} \sum_{j=i}^{m} (-1)^{j-i} C_{j}^{i} f(j)\\ &=\sum_{j=n}^{m} f(j) \sum_{i=n}^{j} (-1)^{j-i} C_{i}^{n} C_{j}^{i}\\ &=\sum_{j=n}^{m} f(j) C_{n}^{j} \sum_{i=n}^{j} (-1)^{j-i} C_{j-n}^{j-i}\\ &=\sum_{j=n}^{m} f(j) C_{n}^{j} \sum_{t=0}^{j-n} (-1)^{t} C_{j-n}^{t}\\ &=\sum_{j=n}^{m} f(j) C_{n}^{j} [j-n==0]\\ &=f(n) C_{n}^{n}\\ &=f(n) \end{aligned} \]

证毕。

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)\),不难发现这是一个二项式反演的形式,于是有:

\[\begin{aligned} h(x) &= \sum_{i=0}^{x} (-1)^{x-i} C_{x}^{i} g(i)\\ &= (-1)^{x-k+1} C_{x}^{k-1}\\ \therefore f(x) &= (-1)^{x-k} C_{x-1}^{k-1} \end{aligned} \]

原式得证。

  • 上述的式子可以套到期望里面,如下面的例题。

3、例题

Luogu4707 重返现世

bzoj4036 按位或

数论相关

BSGS(咕)

莫比乌斯反演(咕)

杜教筛(咕)

min_25筛

click here

扩展欧拉定理(咕)

其它

牛顿迭代

考虑对于一个递增或递减函数\(f(x)\),我们要求它的零点。

那我们随便取一个初值\(x_0\)(与零点越相近越好),然后每次作过\((x_0,f(x_0))\)\(f(x)\)的切线。容易得到其切线方程为\(y=f'(x_0)(x-x_0)+f(x_0)\)

将这个切线方程的零点作为下一个\(x_0\),不断重复上述过程,然后在精度满足条件的时候就可以得到答案。

泰勒展开

posted @ 2021-03-16 20:10  FakeDragon  阅读(169)  评论(0编辑  收藏  举报