EI magic学习笔记
是选手的时候完全不会生成函数,退役了想要学一学。写个博客记录一下学习进程吧。
右复合
微分有限右复合:设 \(H = F(G)\), \(F\) 微分有限,则可将 $F(G), F'(G), \cdots $用 \(H\) 表示,而后可以带入 \(Q(G, F(G), F'(G), \cdots)=0\) 得到 \(H\) 的微分方程。
拉格朗日反演
Laurent级数:允许初项是负的;从\(n_0\) 次开始。
形式留数:当 \(n_0=1\) 时,\([x^{-1}]F'(x)F^k(x)=[k=-1]\)。
(证明:当 \(k\ne -1\) 时,左式\(=1/(k+1)(F^{k+1}(x))'\)。当 \(k=-1\) 时成立。)
拉格朗日反演:\(n_0=1, F(G(x))=x\),则 \(n[x^n]F(x)^k=k[x^{-k}]G(x)^{-n}\)。
证明:\(LHS=n[x^{-1}]F(G(x))^k/G^{n+1}G'=n[x^{-k-1}]G'G^{-(n+1)}=-[x^{-k-1}](G^{-n})'=k[x^{-k}]G^{-n}=RHS\).
常用形式:\([x^n]H(F(x))=1/n [x^{n-1}]H'(x)(x/G(x))^n\) 。(证明:只需验证 \(H=x^k\) 即可。)
用途:计算复合时,如果复合里的东西具有较好的形式(即:有复合逆),我们可以把问题变成计算 \(H'(x)\) 和 \(x/G(x)\) 的幂。例题的情形是二元多项式(即 \(H\) 的系数包含 \(y\)),此时可以使用复合的方法让 \(H'\) 中 \(y\) 的每次项系数是 \(x\) 的单项式、\(G\) 系数不含 \(y\),从而完成计算。
拉格朗日反演的变式(可以在 \(n\) 不可逆时用):\([x^n]F(x)^k=[x^{-k-1}]G(x)^{-n-1}G'\) (直接见拉格朗日反演证明第一步)
变式的带 \(H\) 形式:\([x^n]H(F(x))=[x^n]H(x)(x/G(x))^{n+1}G'(x)\)。
用途:感觉严格包含正常形式,并且不用求导,很方便。
模数很小:可以用类似卢卡斯定理的方法。
线性递推
\([x^n] P(x)/Q(x)=[x^n](P(x)Q(-x))/(Q(x)Q(-x))\),此时分母的幂次均为 2 的倍数,只需保留分子中和 \(n\) 同奇偶性的部分然后递归。
多元集合幂级数
可以将 \((x_1, \cdots, x_n)\) 理解为 \(y_1, y_2, \cdots, y_n\) 进制数直接压平。为避免进位,我们对每一位计算一个校验码 (即:只考虑这一位往前的位的值。如果不进位,则结果校验码为原先总和,否则为原先总和加 \(1\))。将校验码相加模 \(n\) 即可。
转置原理
为计算 \(x[i]=\sum_{i, j} A[i, j]y[j]\),只需计算 \(x[i]=\sum_{i, j} A[j, i]y[j]\) 而后将计算过程转置。
例题:给定二次多项式 \(F\) 和多项式 \(G\),对每个 \(i\) 计算 \([x^n] F^i G\)。
解法:答案相当于 \(a_i = \sum_j [x^{n-j}]G_j [x^j]F^i\), 转置后只需计算 \(a_i=\sum_j [x^{n-j}]G_j [x^i]F^j\) 即 \(G^r(F_j)\). 二次多项式的复合可以通过配方解决,Done。