感觉知识以一个很快的速度从脑子里流逝
看看还记得多少
day1
数论,多项式
裴蜀定理
\(ax + by = c\) 有解 \(\Leftrightarrow \gcd(a, b) | c\)
费马小定理
\(p\) 是素数,\(a^{p - 1} \equiv 1 \pmod{p}\)
证?
注意到模 \(p\) 的剩余系 \(0,1,\ldots p - 1\)。
有 \(a < p \Rightarrow \gcd(a, p) = 1\),由于 \(\gcd(i, p) = 1,i\in[1, p - 1]\),那么 \(a,2a,\ldots (p - 1)a\) 在模 \(p\) 意义下不等于 \(0\),且与 \(1, 2, \ldots p - 1\) 存在一一对应关系。一一对应?
反证,如果存在 \(i \neq j, ia \equiv ja \pmod{p}\),因为 \(\gcd(a, p) = 1\),那么 \(i\equiv j \pmod{p}\),也就是 \(i = kp + j\),又因为 \(1 \le i,j \le p - 1\),所以 \(k = 0\),也就是 \(i = j\)。
所以不存在 \(ia\) 和 \(ja\) 在同一个同余等价类里。那么 \(\displaystyle\prod_{i = 1}^{p - 1} i\cdot a \equiv \prod_{i = 1}^{p - 1} i \pmod{p}\),即 \(a^{p - 1} \equiv 1 \pmod{p}\)。
中国剩余定理
中国剩余定理和拉格朗日插值类似,
CRT 对每个方程构造在第 \(i\) 个方程等于 \(y_i\) 且在其他方程等于 \(0\) 的值并求和;
拉格朗日插值对每个 \(i\) 构造在 \(x_i\) 处值为 \(y_i\) 且在其他地方值为 \(0\) 的函数求和。
那么对每个 \(i\) 构造 \(\displaystyle y_i\prod_{j \neq i} p_j p_j^{-1}\),对这个求和就是答案。其中每个 \(i\) 在 \(j \neq i\) 的方程中由于存在 \(p_j\) 因子所以值为 \(0\),而在 \(i\) 方程中值为 \(y_i\)。
扩展中国剩余定理
和中国剩余定理没什么关系?
解决的问题有关
合并同余方程 \(x \equiv a_1 \pmod {p_1},x \equiv a_2 \pmod {p_2}\),
那么 \(x=a_1 + k_1p_1 = a_2 + k_2p_2\),\(k_1p_1 - k_2p_2 = a_2 - a_1\),exgcd
解方程,新模数是 \(\operatorname{lcm}(p_1, p_2)\)。
扩展卢卡斯定理
卢卡斯定理咱也不会证,直接记式子 \(\binom{n}{m} \equiv \binom{n \bmod p}{m \bmod p}\binom{n / p}{m / p} \pmod p\)
扩展卢卡斯表示拆成模质数的幂然后中国剩余定理合并。
知周所众,组合数 \(\binom{n}{m} = \frac{n!}{m!(n - m)!}\)
那么在模 \(p_i^{c_i}\) 下,\(n!\) 可能带个 \(p\) 因子,求不了逆元,所以要求 \(\frac{n!}{p^x}\)(将 \(n!\) 中 \(p\) 去掉后的值)以及这个 \(x\)。
如果模 \(p^c\)。
首先将 \(n!\) 每 \(p^c\) 分一段,对于每个整段,先将所有含 \(p\) 因子的数拿出去单独处理。剩下的部分根据 Wilson 定理的推论\(^{[1]}\),积在模 \(p^c\) 意义下与 \(-1\) 同余。
对于剩下的散段,暴力。
对于我们拿出来的含有 \(p\) 因子的数,提出这个 \(p\) 因子后是相同的子问题。
\(^{[1]}\):Wilson 定理的推论如下,实际上并非所有情况都有与 \(-1\) 同余:
\(
(p^q!)_p\equiv
\begin{cases}1, & (p=2) \land (q\geq 3),\\-1, & \text{otherwise}.
\end{cases}
\)
举例:\(22! \bmod 9\)。
\(
\begin{aligned}
22! = &1 \times 2 \times {\color{red}3} \times 4 \times 5 \times {\color{red}6} \times 7 \times 8 \times {\color{red}9} \times\\
&10 \times 11 \times {\color{red}12} \times 13 \times 14 \times {\color{red}15} \times 16 \times 17 \times {\color{red}18} \times\\
&19 \times 20 \times {\color{red}21} \times 22 \\
= &(-1)^2 \times (19 \times 20 \times 22) \times {\color{red}3^7 \times 7!}
\end{aligned}
\)
原根
太高深了,wtcl 没跟上。
原根判定定理:\(g\) 是模 \(m\) 的原根的充要条件:对于每个 \(\varphi (m)\) 的质因子 \(p\) 都有 \(g^{\frac{\varphi(m)}{p}} \not\equiv 1 \pmod{m}\)。
找模数的原根可以暴力枚质数(\(3,5,7,11\))检验(逃)
莫比乌斯反演
积性函数:若对于 \(\gcd(x_1, x_2) = 1\),有 \(f(x_1x_2) = f(x_1)f(x_2)\),则 \(f(x)\) 是积性函数。
莫比乌斯函数:
\(
\mu(n) =
\begin{cases}
1 & n = 1\\
0 & n \text{ 含有平方因子}\\
(-1)^k & k \text{ 为本质不同质因子个数}
\end{cases}
\)
关键性质:\(\mu * 1 = \varepsilon\)。
(忘了课上证没证,没证就是在狄利克雷生成函数那里提了一嘴)
反演结论:\(\displaystyle [\gcd(i, j) = 1] = \sum_{d|\gcd(i, j)}\mu(d)\)
直接带入上面
常用:\(\varphi * 1 = \operatorname{id}\)
推式子时有 \([\gcd(i, j) = d]\) 的把 \(d\) 除掉用 \(\mu\) 化式子
有 \(\gcd(i, j)\) 的可以考虑直接用 \(\varphi * 1\) 化式子(可能避免 \(dp\) 化 \(Q\)?)
\(\operatorname{lcm}(x, y)=\frac{xy}{\gcd(x, y)}\)
此时解释了一下例题中给出的结论:\(\displaystyle d(i \cdot j) = \sum_{x|i}\sum_{y|j} [\gcd(x, y) = 1]\)
\(d\) 是约数个数函数(积性)我们把 \(i, j\) 都写成唯一分解定理形式 \(i = \prod p_k^{a_k},j = \prod p_k^{b_k}\),其中 \(p\) 枚举范围相同,\(c_k\) 与 \(d_k\) 可以为 \(0\)(不同时为 \(0\))。
考虑每个因数 \(\prod p_k^{c_k},c_k \le a_k + b_k\) 分别在这些时候统计:
- \(c_k \le a_k\) 令其在 \(x\) 中 \(p_k\) 的次数为 \(c_k\),\(y\) 中为 \(0\) 时统计。
- \(c_k > a_k\) 令其在 \(x\) 中 \(p_k\) 的次数为 \(a_k\),\(y\) 中为 \(c_k - a_k\) 时统计。
显然这么统计不漏,此时我们令第二种情况对应的在 \(x\) 中 \(p_k\) 的次数为 \(0\),\(y\) 中为 \(c_k - a_k\) 时统计,显然这部分之前并不贡献,而与第二种情况一一对应,故不重不漏。
那么上述所有统计答案情况有对于每个 \(p_k\), \(x\) 的次数为 \(0\) 或 \(y\) 的次数为 \(0\),那么 \(\sum_{x|i}\sum_{y|j} [\gcd(x, y) = 1]\) 可统计到所有贡献。
杜教筛
亚线性筛前缀和
思想:求 \(f\) 的前缀和 \(S(n)\),构造一个数论函数 \(g\),有
\(
\displaystyle
\begin{aligned}
\sum_{i = 1}^n (f*g)(i)
&= \sum_{i = 1}^n\sum_{d|i}g(d)f(i/d)\\
&= \sum_{d = 1}^{n}g(d)\sum_{i = 1}^{n/d}f(i)\\
&= \sum_{d = 1}^{n}g(d)S(\lfloor n/d \rfloor)
\end{aligned}
\)
那么能得到
\(
\displaystyle
g(1)S(n) = \sum_{i = 1}^n(f*g)(i) - \sum_{d=2}^ng(d)S(\lfloor n/d \rfloor)
\)
要求:能快速求 \(f*g\) 的前缀和以及 \(g\) 的前缀和。
eg.
\(\mu*1 = \varepsilon, \varphi*1 = \operatorname{id}\)
狄利克雷生成函数(DGF)
可能可以用来找杜教筛的 \(g\) ……吗?
默认是积性函数的 DGF 了。
\(\displaystyle\tilde{F}(x) = \sum_{i\ge 1} \frac{f(i)}{i^x}\)
其中 \(f(x)\) 是积性函数,有
\(\displaystyle\tilde{F}(x) = \prod_{p \text{ is prime}}\left(1 + \frac{f(p)}{p^x} + \frac{f(p^2)}{p^{2x}} + \ldots \right)\)
感性理解一下
由于是积性函数,对于每个 \(i\ge 1\) 都可以唯一分解拆成 \(\displaystyle\prod \frac{f(p_i^{c_i})}{(p^{c_i})^{x}}\),相对的,上面那个积式拆开可以拼出全体自然数。
狄利克雷生成函数卷积结果的系数是两个积性函数狄利克雷卷积的结果:
\(\displaystyle\tilde F(x)\tilde G(x) = \sum_{i}\sum_{j}\frac{f(i)g(j)}{(ij)^x} = \sum_i\frac{1}{i^x}\sum_{d|i}f(d)g(i/d)\)
序列 \([1,1,1,\ldots]\) (或者说积性函数 \(1(x)\))的 DGF 是 \(\sum_{i \ge 1} \frac{1}{i^x} = \zeta(x)\),\(\zeta\) 是黎曼函数。
黎曼函数:定义在 \([0, 1]\) 上的函数,若 \(x = p / q,\gcd(p, q) = 1\)(\(x\) 能表示成最简分式),\(\zeta(x) = 1 / q\),否则 \(\zeta(x) = 0\)。
\(\displaystyle\zeta(x) = \prod_{p \text{ is prime}}\left(1 + \frac{1}{p^x} + \frac{1}{p^{2x}} + \ldots\right) = \prod_{p \text{ is prime}}\frac{1}{1 - p^{-x}}\)
莫比乌斯函数 \(\mu\) 的 DGF:
\(\displaystyle\tilde M(x) = \prod_{p \text{ is prime}}\left(1 - \frac{1}{p^x}\right) = \prod_{p \text{ is prime}}(1 - p^{-x})\)
根据莫比乌斯函数定义 \(\mu(p) = -1,\mu(p^k) = 0,(k \ge 2)\),代入得上式。
此时可以发现 \(\zeta(x)\tilde M(x) = 1\),所以 \(\mu * 1 = \varepsilon\)。
欧拉函数 \(\varphi\) 的 DGF:
\(
\displaystyle
\begin{aligned}
\tilde \Phi(x)
&= \prod_{p \text{ is prime}}\left(1 + \frac{(p - 1)}{p^x} + \frac{p(p - 1)}{p^{2x}} + \ldots\right) \\
&= \prod_{p}\left((p^{-1} + 1 - p^{-1}) + \frac{1 - p^{-1}}{p^{x - 1}} + \frac{1 - p^{-1}}{p^{2x-2}} + \ldots \right) \\
&= \prod_{p} \left(p^{-1} + (1 - p^{-1})\left(1 + \frac{1}{p^{x - 1}} + \frac{1}{p^{2x-2}} + \ldots \right) \right) \\
&= \prod_{p} \left(p^{-1} + (1 - p^{-1})\frac{1}{1 - p^{1 - x}} \right) \\
&= \prod_{p} \frac{(p^{-1} - p^{-x}) + (1 - p^{-1})}{1 - p^{1 - x}} \\
&= \prod_{p} \frac{1 - p^{-x}}{1 - p^{1 - x}}
\end{aligned}
\)
注意到 \(\tilde \Phi(x) = \frac{\zeta(x - 1)}{\zeta(x)}\)
多项式并非全家桶
多项式乘法(FFT/NTT):
思想是系数转点值对应相乘再转回去,通过单位根性质加入这个过程。
因为板子封装好了较为熟悉且能力不够无法理解故不理解。
多项式求逆:
倍增处理,如果我们已知 \(F(x)G'(x) \equiv 1 \pmod{x^{\lceil n/2 \rceil}}\),求 \(G(x)\) 满足 \(F(x)G(x) \equiv 1 \pmod{x^n}\)。
多项式 \(\ln\):
\(\ln(f(x))\) 求导:\(\frac{f'(x)}{f(x)}\)。
所以求导乘逆再积回去。
多项式 \(\exp\):
牛顿迭代:
给定一个多项式函数 \(F(X)\),求一个多项式使得 \(F(X) \equiv 0 \pmod{x^n}\)。
如果已经得到 \(F(X_0) \equiv 0 \pmod{x^{\lceil n/2 \rceil}}\),将 \(F(X)\) 在 \(X_0\) 处泰勒展开,
\(\displaystyle\sum_{i = 0}^{n} \frac{F^{(i)}(X_0)}{i!}(X - X_0)^i \equiv 0 \pmod{x^n}\),
当 \(i > 1\) 时,\((X - X_0)^i \equiv 0 \pmod{x^n}\),所以
\( \displaystyle \begin{aligned} F(X_0) + F'(X_0)(X - X_0) &\equiv 0 &\pmod{x^n} \\ X &\equiv X_0 - \frac{F(X_0)}{F'(X_0)} &\pmod{x^n} \end{aligned} \)
多项式 \(\exp\):
要求 \(X \equiv e^G \pmod{x^n}\)。
构造函数 \(F(X) = \ln(X) - G\),求这个的零点。
那么代入牛顿迭代 \(\displaystyle X \equiv X_0 - \frac{\ln(X_0) - G}{\frac{1}{X_0}} \equiv X_0 - \ln(X_0)X_0 + GX_0 \pmod{x^n}\)
多项式开根
非加强版。
取 \(\ln\),乘 \(\frac{1}{2}\),求 \(\exp\)。
多项式快速幂
取 \(\ln\),乘幂次,求 \(\exp\),注意始终对 \(P\) 取模,而非应用欧拉定理对 \(P - 1\) 取模。
多项式带余除法
或者说多项式取模
给定 \(F, G\),求 \(Q, R\) 满足 \(F = QG + R\)。
\(F, G, Q, R\) 的次数分别是 \(n, m, n - m, < m\)。
带余除法坏,求逆好,看看能不能把 \(R\) 毙掉。
首先往多项式里传参传 \(\frac{1}{x}\),在给两边同时乘上 \(x^n\)。
对于 \(n\) 项多项式来说就相当于翻转(reverse
)系数数组。
记多项式 \(A\) 翻转系数后为 \(A_r\)。
那么 \(F\) 翻转系数,\(QG\) 各自分到自己次数的 \(x\) 也翻转系数,\(R\) 取 \(m - 1\) 个 \(x\) 翻转系数,剩下的乘在外面。
得到 \(F_r = Q_rG_r + R_r x^{n - m + 1}\)。
那么我们在模 \(x^{n - m + 1}\) 下能把 \(R_r\) 消去,就可以多项式求逆出 \(Q_r\) 了。然后翻转回去减一下就能得到 \(R\)。
day2
组合计数,多项式
二项式反演
一般见于至多/至少好求但是恰好不好求的转化。
\(f\) 是钦定,\(g\) 是恰好。
那么 \(\displaystyle f_n = \sum_{i = n}^{sum} \binom{sum}{i} g_i\)。
那么 \(\displaystyle g_n = \sum_{i = n}^{sum} \binom{sum}{i}(-1)^{i - n} f_i\)。
大约是这样的形式吧,不同的题有些细节。
错位排列
递推显见:\(D_i = (i - 1)(D_{i - 1} + D_{i - 2})\)。
那么能不能容斥搞呢?
考虑什么好计算,不加限制的排列个数好计算;什么好钦定,在正确位置的数好钦定。
那么得到:\(\displaystyle D_n = \sum_{i = 0}^{n}\binom{n}{i}(-1)^i(n - i)!\)。
好像还能生成函数搞,但是不会了。
卡特兰数
常见公式:
\(H(n) = \binom{2n}{n} - \binom{2n}{n - 1}\)。典,网格图翻对角线。
\(
H_n =
\begin{cases}
\sum_{i = 1}^n H_{i - 1}H_{n - i} & n \ge 2\\
1 & n = 0, 1
\end{cases}
\)。
递推式理解:考虑走网格图方案数,枚举第一次碰到线的位置,那么之前不能碰到线,也就是先右最后上中间不能碰到 \(y = x - 1\),方案数为 \(H_{i - 1}\)。后面随便走方案 \(H_{n - i}\)。
斯特林数
第二类斯特林数
符号:\(n \brace m\)
表示将 \(n\) 个不同元素分到 \(m\) 个不区分的非空集合的方案数。
递推:\({n\brace m} = {n - 1 \brace m - 1} + m{n - 1 \brace m}\)。
加入一个新元素,要么单开一个集合,要么从 \(m\) 个集合里选一个放进去。
通项公式:\(\displaystyle {n\brace m} = \sum_{i = 0}^{m} \frac{(-1)^{m - i} i^n}{i!(m - i)!}\)。
这玩意有组合意义/jk
集合不区分(盒子无标号)怎么都不好搞,考虑先给标上 \(1\sim m\),最后除以 \(m!\) 去掉标号。
那么此时 \(n\) 个不同球放到 \(m\) 个不同(可空)盒是好算的 \(m^n\),钦定空盒可以反演:
\(\displaystyle {n \brace m} = \frac{1}{m!} \sum_{i = 0}^m \binom{m}{i} (-1)^{m - i} i^{n}\)。
上面是钦定 \(m - i\) 个盒子为空的式子,化简即可得到通项。
此外能发现通项公式很像 \(i\) 和 \(m - i\) 在卷。所以可以 NTT 简单求第二类斯特林数行。
第一类斯特林数
符号:\(n \brack m\)
表示将 \(n\) 个不同元素分成 \(m\) 个不区分的非空轮换的方案数。
递推:\({n\brack m} = {n - 1 \brack m - 1} + (n - 1){n - 1 \brack m}\)。
加入一个新元素,要么单开一个轮换,要么放到之前任意元素的后面,都不会重复。
上升幂与普通幂
\(\displaystyle x^{\overline{n}}=\sum_{k} {n \brack k} x^k\)
\(\displaystyle x^n=\sum_{k} {n \brace k} (-1)^{n-k} x^{\overline{k}}\)
下降幂与普通幂
\(\displaystyle x^n=\sum_{k} {n \brace k} x^{\underline{k}}\)
\(\displaystyle x^{\underline{n}}=\sum_{k} {n \brack k} (-1)^{n-k} x^k\)
学长好像讲了怎么推,但是忘了,对不起 QWQ
球 与 盒 的 二 三 逝
十二重计数法(Twelvefold Way):
Wikipedia 上竟然没有中文(震怒)
\(n\) 个球全部放入 \(m\) 个盒子,求方案数:
\(\operatorname{I}\):球不同,盒不同,可空
每个球有 \(m\) 中放法:\(m^n\)。
\(\operatorname{II}\):球不同,盒不同,每个盒最多放一个
给盒排列:\(m^{\underline n}\)。
\(\operatorname{III}\):球不同,盒不同,非空
考虑根据 \(\operatorname{I}\) 反演,钦定空盒数量:\(\sum_{i}(-1)^{m - i}\binom{m}{m - i} i^n\)
\(\operatorname{IV}\):球不同,盒同,可空
注意到非空即为第二类斯特林数定义,枚举非空盒数目,即为第二类斯特林数行前缀和。
根据通项公式卷积求一行即可。
\(\operatorname{V}\):球不同,盒同,每个盒最多放一个
盒子没区别,所以只要看球能不能全放进去:\([n \le m]\)。
\(\operatorname{VI}\):球不同,盒同,非空
注意到是第二类斯特林数定义,上面 \(\operatorname{IV}\) 已经求了一行了,直接输出。
\(\operatorname{VII}\):球同,盒不同,可空
球盒最经典的限制,可空则提前放入 \(m\) 个球,插板法:\(\binom{n + m - 1}{m - 1}\)。
\(\operatorname{VIII}\):球同,盒不同,每个盒最多放一个
球没区别,所以只要看哪些盒子有球:\(\binom{m}{n}\)。
\(\operatorname{IX}\):球同,盒不同,非空
球盒最经典的限制,插板法:\(\binom{n - 1}{m - 1}\)。
\(\operatorname{X}\):球同,盒同,可空
考虑插板法的思考,将球排成一排,分成 \(m\) 份,由于盒无区别,所以要求分出来的 \(m\) 份(每份为 \(a_i\))满足 \(a_1 \ge a_2 \ge \cdots \ge a_m \ge 0, \sum a_i = n\)。
这个的计数有个专业名词叫做分拆数,将 \(n\) 分成 \(m\) 份称为 \(n\) 的 \(m\) 部分拆数。
有递推式 \(p_{n, m} = p_{n, m - 1} + p_{n - m, m}\)。
含义为要么新增一个 \(0\) 的部分,或者给 \(m\) 个部分同时加 \(1\)。
注意到递推关系中 \(m\) 只相差 \(1\),考虑对固定 \(m\) 求 \(p_n\) 的生成函数,根据递推式有:
\(F_m = F_{m - 1} + F_m x^{m} \Rightarrow F_m = \frac{1}{1 - x^m}F_{m - 1}\)。
边界是 \(F_1\) 是 \([1, 1, 1\ldots]\) 的生成函数。
那么可以得到 \(F_m = \prod_{i = 1}^m \frac{1}{1 - x^i}\)。
求法:取 \(\ln\) 再取 \(\exp\) 得 \(F_m = \exp(\sum_{i = 1}^m -\ln(1 - x^i))\),
泰勒展开 \(F_m = \exp(\sum_{i = 1}^m \sum_{j} \frac{x^{ij}}{j})\)。
只需要处理到我们要求的 \(n\) 以内的范围,那么显然可以 \(O(n \ln n)\) 调和级数求取 \(\ln\) 后的多项式模 \(x^{n + 1}\)。
\(\operatorname{XI}\):球同,盒同,每个盒最多放一个
理由同 \(\operatorname{V}\),答案同 \(\operatorname{V}\)。
\(\operatorname{XII}\):球同,盒同,非空
由于非空,球同,考虑先取 \(m\) 个球放盒子里,剩下的跑分拆数,答案为 \(p_{n - m, m}\)。
多项式并非全家桶 续
多项式多点求值
将给定的点分成两部分
\(
X_0 = \left\{x_1, x_2, \cdots, x_{\frac{n}{2}}\right\} \\
X_1 = \left\{x_{\frac{n}{2} + 1}, x_{\frac{n}{2} + 2}, \cdots, x_n\right\}
\)
构造多项式 \(\displaystyle g_0(x) = \prod_{x_i\in X_0} (x - x_i)\)。
那么 \(\forall x \in X_0, g_0(x) = 0\)。
如果把 \(f(x) \bmod g_0(x)\),得 \(f_0(x) \equiv f(x) \pmod{g_0(x)}\),那么 \(f(x) = g_0(x) Q(x) + f_0(x)\)。
如果把 \(x \in X_0\) 代入,由于 \(g_0(x) = 0\),那么 \(f(x) = f_0(x)\)。
问题规模减少一半。向左右分治解决。
\(g_i\) 可以类似线段树建树预处理。
多项式快速插值
洛必达法则:
直接把分母洛到分子进行化简。
对于极限 \(\displaystyle \lim_{x \to a} \frac{f(x)}{g(x)}\),如果 \(f(x)\) 和 \(g(x)\) 都趋近于 \(0\),或正无穷,那么可以同时导然后作比:\(\displaystyle \lim_{x \to a} \frac{f(x)}{g(x)} = \lim_{x \to a} \frac{f'(x)}{g'(x)}\)。
拉格朗日插值:\(\displaystyle f(x) = \sum_{i = 1}^n y_i \prod_{j \neq i} \frac{x - x_j}{x_i - x_j}\)。
\(\displaystyle \prod_{j \neq i} (x_i - x_j) = \lim_{x \to x_i} \frac{\prod_{j = 1} ^ n (x - x_j)}{x - x_i}\)。记 \(\displaystyle M(x) = \prod_{j = 1}^n (x - x_j)\),根据洛必达法则,\(\displaystyle \prod_{j \neq i} (x_i - x_j) = M'(x_i)\)。
那么拉格朗日插值得式子变为 \(\displaystyle f(x) = \sum_{i = 1}^n \frac{y_i}{M'(x_i)} \cdot \frac{M(x)}{x - x_i} = M(x) \sum_{i = 1}^n \frac{\frac{y_i}{M'(x_i)}}{x - x_i}\)。