省选数学内容复习
发现我的数学确实太菜了,决定从基础开始梳理一下学过的数学内容。
乘法逆元
求 (a^{-1}) 满足 (a imes a^{-1}equiv 1pmod{p}) 。
费马小定理
若 (p) 是质数,那么有:
带入上面的式子,可以得到 (a^{-1}=a^{p-2}) ,利用快速幂求解即可。
欧拉定理
若 (gcd(a,p)=1) ,那么有:
费马小定理是 (p) 为质数时的特殊情况。
推论
若 (gcd(a,p)=1) ,那么 (a^bequiv a^{b mod varphi(p)}pmod p) 。
若 (gcd(a,p)>1) ,且 (b>varphi(p)) ,有 (a^b equiv a^{bmod varphi(p)+varphi(p)} pmod p) 。
拓展欧几里得算法
我们相当于是在求解一个线性同余方程:
只要存在逆元就一定有解。
裴蜀定理
对任意两个数 (x,y) ,我们设 (gcd(x,y)=d) ,那么方程 (ax+by=d) 一定有解。
同样,这也可以拓展到 (n) 个数上。
高斯消元
对于 (n) 元线性一次方程组,我们可以求出一种的一组可行解。
构造出增广矩阵,然后通过加减消元得到上三角矩阵,最后回带求解即可。
注意要先判断无解,再判断无穷解。
矩阵树定理
我们设 ((x,y,z)) 表示一条 (x ightarrow y) 的边权为 (z) 的有向 / 无向边。
假设现在给定一个图 (G) ,它的基尔霍夫矩阵的任意一个代数余子式就是所有生成树的边权积之和。
无向图
度数矩阵 (D) :若存在边 ((x,y,z)) ,则 (D[x][x]+=z,D[y][y]+=z) 。
邻接矩阵 (C) :若存在边 ((x,y,z)) ,则 (C[x][y]+=z,C[y][x]+=z) 。
图 (G) 的基尔霍夫矩阵 (A=D-C) 。
删去任意一行一列,求剩下矩阵的行列式即可。
有向图
度数矩阵 (D) :若存在边 ((x,y,z)) ,则内向树中 (D[x][x]+=z) ,外向树中 (D[y][y]+=z) 。
邻接矩阵 (C) :若存在边 ((x,y,z)) ,则内向树和外向树均为 (C[x][y]+=z) 。
图 (G) 的基尔霍夫矩阵 (A=D-C) 。
删去指定的根所在的行和列,求剩下矩阵的行列式即可。
(Catalan) 数
我们记 (C(n)) 为卡特兰数的第 (n) 项,通项式为:
递推式:
实际应用
- 合法括号序列个数。
- 凸多边形三角划分。
- 二叉树计数。
(BSGS)
给定 (x,y,p) ,求最小的 (k) 满足 (x^k equiv y pmod p) 。保证 (gcd(x,p)=1) 。
记 (m=lceil sqrt p ceil,k=am-b,ain[1,m],bin[0,m-1]) 。
带入方程可得:
我们从小到大枚举 (b) ,计算出 (y imes x^b mod p) 放入哈希表中(此时能更新就更新)。
然后再从小到大枚举 (a) ,第一次找到解就是最小解。
(ExBSGS)
给定 (x,y,p) ,求最小的 (k) 满足 (x^k equiv y pmod p) 。不保证 (gcd(x,p)=1) 。
记 (d=gcd(x,p)) 。若 (d ot| y) ,那么当且仅当 (x=0,y=1) 时有解,否则无解。
否则由同余消去律,有 (x^{k-1} imes frac{x}{d}equiv frac{y}{d} pmod{frac{p}{d}}) 。
继续对 (x,frac{p}{d}) 求 (gcd) 后分解,直到 (x) 与 (frac{p}{prod d_i}) 互质。
此时分解了 (t) 轮,可得方程:
首先验证 (kin[0,t-1]) 是否有解, (t) 是 (log) 级别的,不会耗费大量时间。
若无解,对于 (kgeq t) 的部分,两边乘上 (frac{x^t}{prod d_i}) 的逆元后,用普通的 (BSGS) 求解即可。
二次剩余 (Cipolla) 算法
给定 (n,p) ,求解 (x^2 equiv n pmod p) ,保证 (p) 是奇素数。
对 (n=0) 的情况,显然 (x=0) 。
如何判断有解,可以使用欧拉准则:
- 若 (n^{frac{p-1}{2}}equiv 1 pmod p) ,则 (n) 是 (p) 的二次剩余。
- 若 (n^{frac{p-1}{2}}equiv -1 pmod p) ,则 (n) 不是 (p) 的二次剩余。
若有解,我们随机选取一个 (a) ,使得 (a^2-n) 不是 (p) 的二次剩余,可以证得期望步数为 (2) 。
记 (w=sqrt{a^2-n}) ,定义一个新数域 (x+ycdot w) ,类似于复数,只是单位复数为 (w) 。
那么答案 (xequiv pm (a+w)^{frac{p+1}{2}} pmod p) ,根据拉格朗日定理可知虚数部分系数为 (0) 。
中国剩余定理 (crt)
用于解决模数两两互质的线性同余方程组。注意,模数必须是两两互质。
记 (M=prod m_i) ,对于每个方程 (xequiv a_i pmod{m_i}) ,我们招找出一个 (t_i) 满足 (frac{M}{m_i} imes t_iequiv 1 pmod{m_i}) 。
那么最后的答案就是 (sumfrac{M}{m_i} imes t_i imes a_i) 。
拓展中国剩余定理 (Excrt)
用于解决模数不是两两互质的线性同余方程组。
考虑依次合并每个方程。
由同余的基本性质可知,一个合法解 (x_0) 满足 (x_0=a_1+k_1m_1=a_2+k_2m_2) 。
移项得:
可以用 (Exgcd) 来求解。
记 (gcd(m_1,m_2)=d,a_1-a_2=c) 。
那么 (d ot| c) 时,显然无解,这时整个方程都无解。
否则,使用 (Exgcd) 求出 (k_1,k_2) ,然后带入原方程即可求出 (x_0) ,两个方程的通解即为 (x=x_0+lcm(m_1,m_2)) 。
然后继续和之前的合并,即可得到最后的答案。
Lucas定理
拓展 Lucas(暴力)
(p) 不为质数时,我们采取以下做法。
将 (p) 拆成 (p_1^{c_1}cdot p_2^{c_2}cdots p_k^{c_k}) ,分别求出 (inom{n}{m}pmod {p_i^{c_i}}) 的答案,然后 (crt) 合并。
总所周知, (inom{n}{m}=frac{n!}{m!(n-m)!}) ,所以我们只需要求出 (n! pmod{p_i^{c_i}}) 的答案即可。
我们将 (n!) 拆成两部分:是 (p_i) 的倍数,不是 (p_i) 的倍数。
对于是 (p_i) 的倍数的,我们都提取一个 (p_i) 出来,就变成了一个子问题。
不是 (p_i) 的倍数的,每 (p_i^{c_i}) 个数是一个循环,求出其中一个循环,然后快速幂求解。注意最后一段要拿出来特判一下。
还有一个问题,算阶乘的时候,我们不能把 (p_i) 算进去,应该单独拿出来计算(防止出现 (n!) 是 (p_i^{c_i}) 的倍数,但 (inom{n}{m}) 不是的情况)。
拉格朗日插值
对于一个 (n) 次多项式,我们知道其 (n+1) 个点值表达,还原出该多项式。
我们设多项式为 (f(x)) ,第 (i) 个点坐标为 ((x_i,y_i)) ,那么我们有:
若是算单个点值,可以直接带入 (O(n^2)) 去算。
若是还原多项式,我们可以先求出 (prod x-x_i) ,对每一个 (i) 我们进行一个类似退背包的操作,然后计算即可。
二项式反演
莫比乌斯反演
证明:
其中,我们将等式 (I*mu=epsilon) 展开可以得到一个很常用的等式:
拉格朗日反演
若两个多项式 (f(x),g(x)) ,满足都没有常数项且一次项系数互为逆元,且 (f(g(x))=x) ,那么称 (f(x),g(x)) 互为复合逆。
假设我们已知 (g(x)) ,要求 (f(x)) 的某一项的系数,那么有:
拓展拉格朗日反演:
斯特林反演
递推式:
第一排为第一类斯特林数,表示将 (n) 个数分为 (k) 个圆排列的方案数。
第二排为第二类斯特林数,表示将 (n) 个数分为 (k) 个集合的方案数。