多项式
FFT 和 NTT 以后再补。
FFT
单位根,复数,乱推
NTT
将单位根变成原根,但模数要满足对于 \(\log_2(\text{序列长度})<n\) ,\(p=2^nx+1\)
MTT
即任意模数。
这时 NTT 使用不了,FFT 会被卡精度。
方法1
使用 3-NTT 。
即取 \(3\) 个 NTT 模数,然后使用中国剩余定理合并。
但有负数的情况下无法使用。
方法2
使用拆位 FFT。
接下来细嗦这个东西。
多项式求逆
给定一个多项式 \(F(x)\) ,请求出一个多项式 \(G(x)\), 满足 \(F(x) \times G(x) \equiv 1 \pmod{x^n}\)。系数对 \(998244353\) 取模。
\(\mathcal{O}(n^2)\) 版
边界 \(g_0={1\over f_0}\)。
那么易得
\[\begin{aligned}
\sum_{i=0}^nf_ig_{n-i}&=0\ \ \ \ (n>0)\\
f_0g_n&=-\sum_{i=1}^nf_ig_{n-i}\\
g_n&=-{1\over f_0}\sum_{i=1}^nf_ig_{n-i}
\end{aligned}
\]
做法
倍增
设 \(m=x^n,m'=x^{\lceil \frac{n}{2}\rceil}\)
设 \(f^{-1}(x)\) 表示 \(f(x)\) 在模 \(x^n\) 意义下的逆元,\(g^{-1}(x)\) 表示 \(f(x)\) 在模 \(x^{\lceil \frac{n}{2}\rceil}\) 意义下的逆元
于是有
\[\begin{aligned}
g^{-1}(x)&\equiv f^{-1}(x) \pmod{m'}\\
g^{-1}(x)-f^{-1}(x)&\equiv 0 \pmod{m'}
\end{aligned}
\]
同时平方得
\[\begin{aligned}
(g^{-1}(x)-f^{-1}(x))^2&\equiv 0 \pmod{m}\\
g^{-2}(x)-2g^{-1}(x)f^{-1}(x)+f^{-2}(x)&\equiv 0 \pmod{m}\\
\end{aligned}
\]
两边同时乘 \(f(x)\) 得
\[\begin{aligned}
f(x)g^{-2}(x)-2f(x)g^{-1}(x)f^{-1}(x)+f(x)f^{-2}(x)&\equiv 0 \pmod{m}\\
f(x)g^{-2}(x)-2g^{-1}(x)+f^{-1}(x)&\equiv 0 \pmod{m}\\
f^{-1}(x)&\equiv 2g^{-1}(x)-f(x)g^{-2}(x) \pmod{m}\\
f^{-1}(x)&\equiv g^{-1}(x)(2-f(x)g^{-1}(x)) \pmod{m}\\
\end{aligned}
\]
递归即可
时间复杂度 \(T(n)=T(\frac{n}{2})+O(n\log n)\) ,即 \(T(n)=O(n\log n)\)
多项式开根
给定一个多项式 \(F(x)\) ,请求出一个多项式 \(G(x)\), 满足 \(G^2(x) \equiv F(x) \pmod{x^n}\)。系数对 \(998244353\) 取模。
\(\mathcal{O}(n^2)\) 版
边界 \(g_0=\sqrt {f_0}\)。
那么易得
\[\begin{aligned}
\sum_{i=0}^ng_ig_{n-i}&=f_i\ \ \ \ (n>0)\\
2g_0g_n+\sum_{i=1}^{n-1}g_ig_{n-i}&=f_i\\
2g_0g_n&=f_i-\sum_{i=1}^{n-1}g_ig_{n-i}\\
g_n&={f_i-\sum_{i=1}^{n-1}g_ig_{n-i}\over 2g_0}\\
\end{aligned}
\]
做法
继续倍增
设 \(m=x^n,m'=x^{\lceil\frac{n}{2}\rceil}\)
设 \(b^2(x)\equiv f(x)\pmod {x^n}\) ,\(g^2(x)\equiv f(x)\pmod {x^{\lceil\frac{n}{2}\rceil}}\)
\[\begin{aligned}
g^2(x)&\equiv f(x) \pmod{m'}\\
g^2(x)-f(x)&\equiv 0 \pmod{m'}\\
\end{aligned}
\]
同时平方得
\[\begin{aligned}
(g^2(x)-f(x))^2&\equiv 0 \pmod{m}\\
(g^2(x)+f(x))^2&\equiv 4g^2(x)f(x) \pmod{m}\\
(\frac{g^2(x)+f(x)}{2g(x)})^2&\equiv f(x) \pmod{m}\\
\end{aligned}
\]
两边同时开方得
\[\begin{aligned}
\frac{g^2(x)+f(x)}{2g(x)}&\equiv b(x) \pmod{m}\\
2^{-1}(g(x)+f(x)g^{-1}(x))&\equiv b(x) \pmod{m}\\
\end{aligned}
\]
递归即可
时间复杂度 \(T(n)=T(\frac{n}{2})+O(n\log n)\) ,即 \(T(n)=O(n\log n)\)
分治NTT/FFT
给定序列 \(g_{1\dots n - 1}\),求序列 \(f_{0\dots n - 1}\)
其中 \(f_i=\sum_{j=1}^if_{i-j}g_j\),边界为 \(f_0=1\)
答案对 \(998244353\) 取模
做法
我们设 \(g_0=0\)
我们设将 \(f\) 卷上 \(g\) 得到的新序列为 \(h\) ,所以
\[h_i=\sum_{j=0}^if_{i-j}\times g_j
\]
与原式十分相似,仔细观察发现原式是从 \(1\) 开始枚举,然而并无大碍,因为 \(g_0=0\) ,所以无影响。
唯一不同的是 \(h_0=0\) 而 \(f_0=1\) 。
于是我们得出 \(f*g=f-f_0\)
开始推
\[\begin{aligned}
f*g&=f-f_0\\
f*g-f&=-f_0\\
f*(1-g)&=f_0\\
f&\equiv{f_0\over 1-g} \pmod {x^n}\\
f&\equiv (1-g)^{-1}
\end{aligned}
\]
套一个多项式求逆就可以了
多项式除法&取模
给定一个 \(n\) 次多项式 \(F(x)\) 和一个 \(m\) 次多项式 \(G(x)\) ,请求出多项式 \(Q(x)\), \(R(x)\),满足以下条件:
- \(Q(x)\) 次数为 \(n-m\),\(R(x)\) 次数小于 \(m\)
- \(F(x) = Q(x) * G(x) + R(x)\)
所有的运算在模 \(998244353\) 意义下进行。
做法
\[f\left({1\over x}\right)=\sum^n_{i=0}a_i{1\over x^i}
\]
两边同时乘上\(1\over x^n\) 得
\[\begin{aligned}
x^nf\left({1\over x}\right)=\sum^n_{i=0}a_ix^{n-i}
\end{aligned}
\]
我们设 \(f_0(x)=x^nf({1\over x})\)
那么我们可以发现,\(f_0(x)\) 只是将 \(f(x)\) 的系数 reverse 了
直接开始推式子
\[\begin{aligned}
F(x)&= Q(x) \times G(x) + R(x)\\
F\left({1\over x}\right)&= Q\left({1\over x}\right) \times G\left({1\over x}\right) + R\left({1\over x}\right)\\
F\left({1\over x}\right)\times x^n&= Q({1\over x}) \times G\left({1\over x}\right)\times x^n + R\left({1\over x}\right)\times x^n\\
F_0(x)&= Q_0(x) \times G_0(x) + R_0\left({1\over x}\right)\times x^{n-m+1}
\end{aligned}
\]
所以
\[\begin{aligned}
F_0(x)&\equiv Q_0(x) \times G_0(x) \pmod{x^{n-m+1}}\\
Q_0(x)&\equiv {F_0(x) \over G_0(x)} \pmod{x^{n-m+1}}
\end{aligned}
\]
又因为 \(Q_0(x)\) 的项数为 \(n-m\) ,所以 \(Q_0(x)\) 就是 \({F_0(x) \over G_0(x)} \bmod x^{n-m+1}\)
然后往回带入 \(Q(x)\),再多项式减法求出 \(R(x)\) 就行了
多项式 \(ln\)
题目
给出 \(n-1\) 次多项式 \(A(x)\),求一个 \(\bmod{\:x^n}\) 下的多项式 \(B(x)\),满足 \(B(x) \equiv \ln A(x)\)
\(\text{mod } 998244353\)
开始抽搐起来
引理1
\(\ln'(x)={1\over x}\)
证明:
\[\begin{aligned}
\ln'(x)&=\lim_{\Delta x\to0}\left({\ln(x+\Delta x)-\ln(x)\over \Delta x}\right)\\
&={\ln(x+\Delta x)-\ln(x)\over \Delta x}\\
&={1\over \Delta x}(\ln(x+\Delta x)-\ln(x))\\
&={1\over \Delta x}\ln\left({x+\Delta x\over x}\right)\\
&={1\over \Delta x}\ln\left(1+{\Delta x\over x}\right)\\
&={1\over x}{x\over \Delta x}\ln\left(1+{\Delta x\over x}\right)\\
&={1\over x}{\ln\left(1+{\Delta x\over x}\right)x\over \Delta x}\\
\end{aligned}
\]
令 \(u={\Delta x\over x}\) ,又因为 \(\Delta x\to 0\) ,所以 \(u\to0\)
原式则等于
\[\begin{aligned}
&{1\over x}{\ln\left(1+u\right)\over u}\\
=&{1\over x}\ln(1+u)^{1\over u}
\end{aligned}
\]
根据自然对数 \(e=\underset{\alpha\to0}{\lim}(1+\alpha)^{1\over\alpha}\),且 \(u\to 0\)
所以原式等于
\[{1\over x}\ln e={1\over x}
\]
证毕
引理2
设 \(h(x)=f(g(x))\)
\(h'(x)=f'(g(x))\times g'(x)\)
证明:
\[\begin{aligned}
h'(x)&=\lim_{\Delta x\to0}\left({h(x+\Delta x)-h(x)\over \Delta x}\right)\\
&={f(g(x+\Delta x))-f(g(x))\over \Delta x}\\
&={f(g(x+\Delta x))-f(g(x))\over g(x+\Delta x)-g(x)}\times {g(x+\Delta x)-g(x)\over \Delta x}\\
&={f(g(x+\Delta x))-f(g(x))\over g(x+\Delta x)-g(x)}\times g'(x)
\end{aligned}
\]
由于 \(\underset{\Delta x\to0}{\lim}\) ,所以 \(x+\Delta x\to x\) ,所以 \(g(x+\Delta x)\to g(x)\) ,所以 \(g(x+\Delta x)-g(x)\to0\)
所以原式等于 $f'(g(x))\times g'(x) $
证毕
\(\mathcal{O}(n^2)\) 版
边界 \(b_0=\ln a_0\),一般为 \(0\) 。
那么易得
由于 \(B'(x)={A'(x)\over A(x)}\),所以 \(A'(x)=B'(x)A(x)\),即
\[\begin{aligned}
(n+1)a_{n+1}&=\sum_{i=0}^n(i+1)b_{i+1}a_{n-i}\\
(n+1)a_{n+1}&=\sum_{i=1}^{n+1}ib_ia_{n-i+1}\\
(n+1)a_{n+1}&=(n+1)b_{n+1}a_0+\sum_{i=1}^{n}ib_ia_{n-i+1}\\
(n+1)b_{n+1}a_0&=(n+1)a_{n+1}-\sum_{i=1}^{n}ib_ia_{n-i+1}\\
b_{n+1}&={(n+1)a_{n+1}-\sum_{i=1}^{n}ib_ia_{n-i+1}\over (n+1)a_0}\\
b_{n}&={na_n-\sum_{i=1}^{n-1}ib_ia_{n-i}\over na_0}\\
\end{aligned}
\]
一般默认 \(a_0=1\) ,所以原式即为
\(b_n=a_n-{1\over n}\sum_{i=1}^{n-1}ib_ia_{n-i}\)
做法
设 \(f(x)=\ln(x)\)
所以 \(B(x)\equiv f(A(x))\)
所以两边求导得 \(B'(x)\equiv f'(A(x))\times A'(x)\)
又因为 \(f'(u)={1\over u}\),所以 \(B'(x)\equiv {A'(x)\over A(x)}\)
所以,我们将 \(A'(x)\) 与 \(A^{-1}(x)\) 求出,再用 \(B'(x)\) 求出 \(B(x)\) 就行了
多项式求导
设我们现在在处理第 \(k\) 次项
所以原式为 \(a_k((x+\Delta x)^k-x^k)\over \Delta x\) ,二项式展开得 \(a_k(x^k-x^k+kx^{k-1}+\cdots)\) ,由于 \(\Delta x\) 可以看作零,所以原式第 \(k\) 项为 \(a_k\times k\times x^{k-1}\)
多项式积分
将多项式求导倒过来就行了
我们可以发现第 \(k-1\) 项是 \(a_k\times k\times x^{k-1}\) ,所以积分后第 \(k\) 项为 \({a_{k-1}\over k}x^k\)
但是我们发现积分会忽略常数项,于是将其补为 \(\ln(1)\) ,即 \(0\)
现在我们就可以开做了
多项式牛顿迭代
这是求一个 \(G(F(x))\equiv0\pmod{x^n}\) 的 \(F(x)\) 的,\(G(x)\) 已知。
我们设 \(G(f(x))\equiv 0\pmod {x^{\lceil {a\over2}\rceil}}\) ,其中 \(f(x)\) 已求出
现在我们要求出 \(G(F(x))\equiv0\pmod {x^a}\) 中的 \(F(x)\)
我们考虑将 \(G(F(x))\) 在 \(f(x)\) 处展开
\[G(F(x))=\sum_{i=0}^{a-1}{G^{(i)}(f(x))\over i!}(F(x)-f(x))^i
\]
我们发现 \(F(x)\equiv f(x)\pmod{x^{\lceil {a\over2}\rceil}}\)
所以 \(F(x)-f(x)\equiv 0\pmod{x^{\lceil {a\over2}\rceil}}\)
所以 \((F(x)-f(x))^2\equiv 0\pmod{x^{\lceil {a\over 2}\rceil\times2}}\)
又因为原式 \(\bmod {\ x^a}\)
所以对于 \(\forall i\geqslant2\) ,都会被模掉
于是原式变为
\[\begin{aligned}
G(F(x))&=G(f(x))+G'(f(x))(F(x)-f(x))\\
0&=G(f(x))+G'(f(x))(F(x)-f(x))\\
0&={G(f(x))\over G'(f(x))}+F(x)-f(x)\\
F(x)&=f(x)-{G(f(x))\over G'(f(x))}\\
\end{aligned}
\]
牛顿迭代基本式子就出来了。
多项式 \(exp\)
引理(似乎无用)
\[\exp'(x)=\exp(x)
\]
证明
\[\begin{aligned}
\exp'(x)&=\lim_{\Delta x\to 0} {\exp(x+\Delta x)-\exp(x)\over\Delta x}\\
&=\lim_{\Delta x\to 0} {e^{x+\Delta x}-e^x\over\Delta x}\\
&=e^x\lim_{\Delta x\to 0} {e^{\Delta x}-1\over\Delta x}\\
\end{aligned}
\]
我们设 \(t=e^{\Delta x}-1\) ,且 \(t\to 0\)
原式即等于
\[\exp(x)\lim_{\Delta x\to 0} {t\over\ln(t+1)}
\]
考虑之前推 \(\ln'\) 的过程
\[\begin{aligned}
\ln'(x)&=\lim_{\Delta x\to0}\left({\ln(x+\Delta x)-\ln(x)\over \Delta x}\right)\\
&={1\over x}\lim_{\Delta x\to0}\left({\ln(1+u)\over u}\right)\\
\end{aligned}
\]
其中 \(u={\Delta x\over x}\)
我们知道 \(\ln'(x)={1\over x}\) (在多项式 \(\ln\) 部分),所以
\[\begin{aligned}
{1\over x}\lim_{\Delta x\to0}\left({\ln(1+u)\over u}\right)&={1\over x}\\
\lim_{\Delta x\to0}\left({\ln(1+u)\over u}\right)&=1\\
\lim_{\Delta x\to0}\left({u\over \ln(1+u)}\right)&=1
\end{aligned}
\]
所以
\[\exp'(x)=\exp(x)\lim_{\Delta x\to 0} {t\over\ln(t+1)}=\exp(x)\times1=\exp(x)
\]
证毕
做法
求 \(B(x)=\exp(F(x))\)
两边 \(\ln\) 一下,可以得到 \(\ln B(x)=F(x)\)
于是 \(\ln B(x)-F(x)=0\)
开始牛顿迭代
我们可以把 \(B(x)\) 看做变量,\(F(x)\) 看做常数
设 \(G(B(x))\equiv \ln B(x)-F(x)\pmod {x^n}\)
套入牛顿迭代公式
\[B(x)\equiv b(x)-{G(b(x))\over G'(b(x))} \pmod {x^n}
\]
根据定义可以得到 \(G'(b(x))=\ln'b(x)={1\over b(x)}\)
所以
\[B(x)\equiv b(x)-b(x)(\ln b(x)-F(x)) \pmod {x^n}
\]
即
\[B(x)\equiv b(x)(1-\ln b(x)+F(x)) \pmod {x^n}
\]
然后就没了
\(\mathcal{O}(n^2)\) 版
引理在这时有用了。
边界 \(b_0=\exp(a_0)\),一般为 \(1\)。
由于 \(B(x)=\exp(A(x))\) ,即 \(B'(x)=\exp(A(x))A'(x)\) ,即 \(B'(x)=B(x)A'(x)\)。
那么易得
\[\begin{aligned}
(n+1)b_{n+1}&=\sum_{i=0}^n(i+1)a_{i+1}b_{n-i}\\
b_{n+1}&={1\over n+1}\sum_{i=1}^{n+1}ia_ib_{n-i+1}\\
b_n&={1\over n}\sum_{i=1}^nia_ib_{n-i}\\
\end{aligned}
\]
多项式快速幂
题目
给定一个 \(n-1\) 次多项式 \(A(x)\),求一个在 \(\bmod\ x^n\) 意义下的多项式 \(B(x)\),使得 \(B(x) \equiv (A(x))^k \ (\bmod\ x^n)\) ,对 \(998244353\) 取模,保证 \(a_0=1\)
做法
因为 \(B(x) \equiv (A(x))^k \ (\bmod\ x^n)\)
所以 \(\ln B(x) \equiv \ln(A(x))\times k \ (\bmod\ x^n)\)
然后 \(B(x) \equiv\exp( \ln(A(x))\times k) \ (\bmod\ x^n)\)
就没了。
加强版
不保证 \(a_0=1\)
那么我们将多项式里的所有系数除以 \(a_0\) ,最后再乘上 \((a_0)^k\) 就行了,根据欧拉定理,\(k\) 对 \(998244352\) 取模。
但是如果 \(a_0=0\) 怎么办呢?
我们可以将多项式左移到 \(a_0\) 不为 \(0\) ,然后算完后再右移左移的位数的 \(k\) 倍就行了
多项式三角函数
题目
给定一个 $n-1 $ 次多项式 \(A(x)\),求两个个在 \(\bmod\ x^n\) 意义下的多项式 \(B(x),C(x)\),使得 \(B(x) \equiv \sin(A(x)) \ (\bmod\ x^n),C(x) \equiv \cos(A(x)) \ (\bmod\ x^n)\) ,对 \(998244353\) 取模
引理1
\[\sin'(x)=\cos(x)\\
\cos'(x)=-\sin(x)
\]
证明(似乎不对)
\[\begin{aligned}
\sin'(x)&=\lim_{\Delta x\to0}{\sin(x+\Delta x)-\sin(x)\over \Delta x}\\
&=\lim_{\Delta x\to0}{\sin(x)\cos(\Delta x)+\cos(x)\sin(\Delta x)-\sin(x)\over \Delta x}\\
&=\lim_{\Delta x\to0}{\sin(x)(\cos(\Delta x)-1)+\cos(x)\sin(\Delta x)\over \Delta x}\\
\end{aligned}
\]
由于 \(\Delta x\to0\) ,所以 \(\cos(\Delta x)-1\to0,\sin(\Delta x)\to0\)
所以原式等于
\[\begin{aligned}
&\lim_{\Delta x\to0}{\sin(x)(\cos(\Delta x)-1)+\cos(x)\sin(\Delta x)\over \Delta x}\\
=&\lim_{\Delta x\to0}{\cos(x)\sin(\Delta x)\over \Delta x}\\
=&\cos(x)\\
\end{aligned}
\]
\[\begin{aligned}
\cos'(x)&=\lim_{\Delta x\to0}{\cos(x+\Delta x)-\cos(x)\over \Delta x}\\
&=\lim_{\Delta x\to0}{\cos(x)\cos(\Delta x)-\sin(x)\sin(\Delta x)-\cos(x)\over \Delta x}\\
&=\lim_{\Delta x\to0}{\cos(x)(\cos(\Delta x)-1)-\sin(x)\sin(\Delta x)\over \Delta x}\\
&=\lim_{\Delta x\to0}{-\sin(x)\sin(\Delta x)\over \Delta x}\\
&=-\sin(x)
\end{aligned}
\]
\[\begin{aligned}
\tan(x)&={\sin(x)\over\cos(x)}\\
\tan'(x)&=\left({\sin(x)\over\cos(x)}\right)'\\
&={\sin'(x)\cos(x)-\sin(x)\cos'(x)\over\cos^2(x)}\\
&={\cos(x)\cos(x)+\sin(x)\sin(x)\over\cos^2(x)}\\
&={1\over\cos^2(x)}\\
\end{aligned}
\]
证毕
引理2
\(\sin(x)\) 与 \(\cos(x)\) 的麦克劳林展开
\[\begin{aligned}
\sin(x)&=\sum_{i=0}^{+\infty}{\sin^{(i)}(0)\over i!}x^i\\
&=\sin(0)+{\sin'(0)\over1!}x+{\sin''(0)\over2!}x^2+{\sin'''(0)\over3!}x^3+{\sin''''(0)\over4!}x^4+\cdots\\
&=\sin(0)+{\cos(0)\over1!}x+{-\sin(0)\over2!}x^2+{-\cos(0)\over3!}x^3+{\sin(0)\over4!}x^4+\cdots\\
\end{aligned}
\]
\[\begin{aligned}
\cos(x)&=\sum_{i=0}^{+\infty}{\cos^{(i)}(0)\over i!}x^i\\
&=\cos(0)+{\cos'(0)\over1!}x+{\cos''(0)\over2!}x^2+{\cos'''(0)\over3!}x^3+{\cos''''(0)\over4!}x^4+\cdots\\
&=\cos(0)+{-\sin(0)\over1!}x+{-\cos(0)\over2!}x^2+{\sin(0)\over3!}x^3+{\cos(0)\over4!}x^4+\cdots\\
\end{aligned}
\]
又因为 \(\sin(0)=0,\cos(0)=1\) ,所以
\[\sin(x)={x\over1!}-{x^3\over3!}+{x^5\over5!}-{x^7\over7!}+\cdots\\
\cos(x)=1-{x^2\over2!}+{x^4\over4!}-{x^6\over6!}+{x^8\over8!}+\cdots
\]
引理3
\(\text{i}\) 为虚数单位
\[\begin{aligned}
\exp(\text{i}x)&=e^{\text{i}x}\\
&=1+{(\text{i}x)\over1!}+{(\text{i}x)^2\over2!}+{(\text{i}x)^3\over3!}+{(\text{i}x)^4\over4!}+\cdots\\
&=1+{\text{i}x\over1!}+{\text{i}^2x^2\over2!}+{\text{i}^3x^3\over3!}+{\text{i}^4x^4\over4!}+\cdots\\
&=1+{\text{i}x\over1!}-{x^2\over2!}-{\text{i}x^3\over3!}+{x^4\over4!}+\cdots\\
&=\left(1-{x^2\over2!}+{x^4\over4!}+\cdots\right)+\left({\text{i}x\over1!}-{\text{i}x^3\over3!}+\cdots\right)\\
&=\left(1-{x^2\over2!}+{x^4\over4!}+\cdots\right)+\text{i}\left({x\over1!}-{x^3\over3!}+\cdots\right)\\
&=\cos(x)+\text{i}\sin(x)
\end{aligned}
\]
\(\text{i}\) 可以引用复平面的概念,即 \(\text{i}\) 等于四次单位根。
做法
我们知道 \(e^{\text{i}x}=\cos(x)+\text{i}\sin(x)\)
所以 \(e^{-\text{i}x}=\cos(x)-\text{i}\sin(x)\)(证明就把上面证明过程的 \(x\) 改成 \(-x\) 即可)
所以
\[\cos F(x)={e^{\text{i}F(x)}+e^{−\text{i}F(x)}\over2}
\]
\[\sin F(x)={e^{\text{i}F(x)}-e^{−\text{i}F(x)}\over2\text{i}}
\]
没了
多项式反三角函数
题目
给定一个 \(n-1\) 次多项式 \(A(x)\) ,其中 \(a_0=0\) ,求一个 \(\bmod{\:x^n}\) 下的多项式 \(F(x)\),满足 \(F(x)\equiv\arcsin A(x)\) 或 \(F(x)\equiv\arctan A(x)\),系数对 \(998244353\) 取模。
引理1
设 \(y=f(a(x))\)
\[(f^{-1}(y))'={a'(x)\over f'(a(x))}
\]
证明
\[\begin{aligned}
f^{-1}(f(a(x)))&=a(x)\\
(f^{-1}(f(a(x))))'\times f'(a(x))&=a'(x)\\
(f^{-1}(f(a(x))))'&={a'(x)\over f'(a(x))}
\end{aligned}
\]
引理2
\[\begin{aligned}
\arcsin'(a(x))&={a'(x)\over \sin'(\arcsin(a(x)))}\\
&={a'(x)\over \cos(\arcsin(a(x)))}\\
\end{aligned}
\]
因为 \(\cos^2(x)+\sin^2(x)=1\) ,原式化为
\[\begin{aligned}
\arcsin'(x)&={a'(x)\over \cos(\arcsin(a(x)))}\\
&={a'(x)\over \sqrt{1-\sin^2(\arcsin(a(x)))}}\\
&={a'(x)\over \sqrt{1-a(x)^2}}\\
\end{aligned}
\]
\[\begin{aligned}
\arccos'(a(x))&={a'(x)\over \cos'(\arccos(a(x)))}\\
&=-{a'(x)\over \sin(\arccos(a(x)))}\\
&=-{a'(x)\over \sqrt{1-\cos^2(\arccos(a(x)))}}\\
&=-{a'(x)\over \sqrt{1-a(x)^2}}\\
\end{aligned}
\]
\[\begin{aligned}
\arctan'(a(x))&={a'(x)\over \tan'(\arctan(a(x)))}\\
&={a'(x)\over {1\over\cos^2(\arctan(a(x)))}}\\
&={a'(x)\over {\cos^2(\arctan(a(x)))+\sin^2(\arctan(a(x)))\over\cos^2(\arctan(a(x)))}}\\
&={a'(x)\over 1+{\sin^2(\arctan(a(x)))\over\cos^2(\arctan(a(x)))}}\\
&={a'(x)\over 1+\tan^2(\arctan(a(x)))}\\
&={a'(x)\over 1+a(x)^2}\\
\end{aligned}
\]
证毕
做法
原式为 \(F(x)\equiv\arcsin A(x)\)
两边求导得 \(F'(x)\equiv{A'(x)\over \sqrt{1-A(x)^2}}\)
再积分回去就行了
下降幂多项式乘法
下降幂 \(x^{\underline n}=\prod_{i=0}^{n-1}(x-i)\)
引理1
\(x^{\underline n}\) 的 EGF 等于 \(x^ne^x\)
\[\begin{aligned}
\sum_{i=0}^\infty{i^{\underline n}\over i!}x^i&=\sum_{i=0}^\infty{1\over (i-n)!}x^i\\
&=x^n\sum_{i=0}^\infty{1\over i!}x^i\\
&=x^ne^x\\
\end{aligned}
\]
所以说,下降幂多项式的点值表示法的 EGF 为
\[\begin{aligned}
\sum_{i=0}^\infty{1\over i!}x^i\sum_{j=0}^\infty f_ji^{\underline j}&=\sum_{j=0}^\infty f_j\sum_{i=0}^\infty{1\over i!}x^i i^{\underline j}\\
&=\sum_{j=0}^\infty f_jx^je^x\\
&=e^x\sum_{j=0}^\infty f_jx^j\\
\end{aligned}
\]
于是点值相乘之后再转回去即可。
普通,下降幂多项式互转
下降转普通
有其点值 EGF 为
\[\sum_{i=0}^\infty{1\over i!}x^i\sum_{j=0}^\infty f_ji^{\underline j}
\]
由上,易证。
\[\sum_{i=0}^\infty{1\over i!}x^i\sum_{j=0}^\infty f_ji^{\underline j}=e^x\sum_{j=0}^\infty f_jx^j
\]
于是,我们可以求得在 \(x\in[0,n)\) 时的所有点值 \(y\) .
这看上去一眼多项式插值。
但是不用多项式多点求值,因为 \(x\) 是连续的。
也就是说
\[{y_i\over \prod_{i=0,i\not=j}^{n-1}(i-j)}={y_i\over i!(-1)^{n-1-i}(n-1-i)!}
\]
而 EGF 里原来就有 \(y_i\over i!\),所以多除以 \((-1)^{n-i-1}(n-1-i)!\) 就行了。
普通转下降
考虑分治 NTT。
设 \(F(x)\) 表示原普通多项式,\(G(x)\) 表示下降幂多项式。
那么有
\[F_{l,r}(x)=F_{l,mid}(x)+x^{mid-l+1}F_{mid+1,r}(x)
\]
于是
\[G_{l,r}(x)=G_{l,mid}(x)+x^{mid-l+1}G_{mid+1,r}(x)
\]
考虑 \(x^{mid-l+1}G_{mid+1,r}(x)\) 怎么求。
不妨将 \(G(x)\) 转化成点值 EGF ,于是乘上 \(x^{mid-l+1}\) 的点值,再插值回去就行了。
多项式多点求值
假设我们现在要求 \(\forall i\in[l,r]\) 的所有 \(a_i\) 的多项式的值。
考虑构造两个多项式。
设中点为 \(mid\).
\[P(x)=\prod_{i=l}^{mid}(x-a_i)\\
P_2(x)=\prod_{i=mid+1}^r(x-a_i)\\
\]
显然:
\[\forall i\in[l,mid],P(a_i)=0\\
\forall i\in[mid+1,r],P_2(a_i)=0\\
\]
所以说,如果我们
\[F(x)=P(x)Q(x)+R(x)\\
F(x)=P_2(x)Q_2(x)+R_2(x)\\
\]
那么在往左区间递归时,即可令 \(F(x)=R(x)\) ,右区间递归时,令 \(F(x)=R_2(x)\)。
多项式快速插值
给你 \(n\) 个点对 \((x_i,y_i)\) ,插出一个 \(n-1\) 次多项式。
考虑拉格朗日插值的公式。
\[f(x)=\sum_{i=1}^ny_i\prod_{j\not=i}{x-x_j\over x_i-x_j}
\]
随便拆开化简一下
\[f(x)=\sum_{i=1}^n{y_i\over\prod_{j\not= i}(x_i-x_j)}\prod_{j\not=i}{(x-x_j)}
\]
我们设 \(P(x)=\prod_{i=1}^n(x-x_i)\)
那么
\[\prod_{j\not=i}(x_i-x_j)={P(x_i)\over x_i-x_i}
\]
\(0\over0\) 可还行?
其实是可以通过洛必达法则化简的。
因为 \(\lim_{x\to x_i}P(x)=0,\lim_{x\to x_i}(x-x_i)=0\) 。
所以
\[\lim_{x\to x_i}{P(x)\over(x-x_i)}=\lim_{x\to x_i}{P'(x)\over(x-x_i)'}=\lim_{x\to x_i}{P'(x)\over1}=P'(x)
\]
于是原式变为
\[f(x)=\sum_{i=1}^n{y_i\over P'(x_i)}\prod_{j\not=i}{(x-x_j)}
\]
所有的 \(P'(x_i)\) 可以多点求值求出。
设
\[F_{l,r}=\sum_{i=l}^r{y_i\over P'(x_i)}\prod_{j=l,j\not=i}^r(x-x_j)
\]
那么
\[\begin{aligned}
F_{l,r}&=\sum_{i=l}^r{y_i\over P'(x_i)}\prod_{j=l,j\not=i}^r(x-x_j)\\
&=\sum_{i=l}^{mid}{y_i\over P'(x_i)}\prod_{j=l,j\not=i}^r(x-x_j)+\sum_{i=mid+1}^r{y_i\over P'(x_i)}\prod_{j=l,j\not=i}^r(x-x_j)\\
&=\prod_{j=mid+1}^r(x-x_j)\sum_{i=l}^{mid}{y_i\over P'(x_i)}\prod_{j=l,j\not=i}^{mid}(x-x_j)+\prod_{j=l}^{mid}(x-x_j)\sum_{i=mid+1}^r{y_i\over P'(x_i)}\prod_{j=mid+1,j\not=i}^r(x-x_j)\\
&=\prod_{j=mid+1}^r(x-x_j)F_{l,mid}+\prod_{j=l}^{mid}(x-x_j)F_{mid+1,r}
\end{aligned}
\]
分治 NTT 即可
第二类斯特林数
定义
第二类斯特林数 \(\begin{Bmatrix}n\\m\end{Bmatrix}\) 表示将 \(n\) 个有标号的点放入 \(m\) 个无标号集合的方案数,集合内至少有一个点。
\(\mathcal{O}(n^2)\)
考虑 \(\mathcal{O}(n^2)\) 递推
\[\begin{Bmatrix}n\\ m\end{Bmatrix}=\begin{Bmatrix}n-1\\ m-1\end{Bmatrix}+m\begin{Bmatrix}n-1\\ m\end{Bmatrix}
\]
也就是说,对于一个新增的点,你可以新开一个集合将其放进去,也可以放进原来的集合中。
行
求出 \(\forall i\in[1,n],\begin{Bmatrix}n\\i\end{Bmatrix}\) 的值。
引理
1.二项式反演
\[f(n)=\sum_{i=0}^n\binom{n}{i}g(i)\iff g(n)=\sum_{i=0}^n(-1)^{n-i}\binom{n}{i}f(i)
\]
证明:
\[\begin{aligned}
f(n)&=\sum_{i=0}^n\binom{n}{i}g(i)\\
&=\sum_{i=0}^n\binom{n}{i}\sum_{j=0}^i(-1)^{i-j}\binom{i}{j}f(j)\\
&=\sum_{j=0}^nf(j)\sum_{i=j}^n(-1)^{i-j}\binom{n}{i}\binom{i}{j}\\
&=\sum_{j=0}^nf(j)\sum_{i=j}^n(-1)^{i-j}\binom{n}{j}\binom{n-j}{i-j}\\
&=\sum_{j=0}^n\binom{n}{j}f(j)\sum_{i=j}^n(-1)^{i-j}\binom{n-j}{i-j}\\
&=\sum_{j=0}^n\binom{n}{j}f(j)\sum_{i=0}^{n-j}(-1)^i\binom{n-j}{i}1^{n-j-i}\\
&=\sum_{j=0}^n\binom{n}{j}f(j)(1-1)^{n-j}\\
&=f(n)
\end{aligned}
\]
2.性质
\[m^n=\sum_{i=0}^m\begin{Bmatrix}n\\i\end{Bmatrix}i!\binom{m}{i}
\]
证明
\(m^n\) 相当于将 \(n\) 个有标号点放入 \(m\) 个有标号集合中(允许集合为空),枚举有 \(i\) 个集合不为空,等式显然成立。( \(i!\) 表示将集合变成有标号的)
做法
将引理二中的式子二项式反演,可得
\[\begin{aligned}
\begin{Bmatrix}n\\m\end{Bmatrix}m!&=\sum_{i=0}^m(-1)^{m-i}\binom{m}{i}i^n
\\&=\sum_{i=0}^m{(-1)^{m-i}\over(m-i)!}\times{m!i^n\over i!}
\\\begin{Bmatrix}n\\m\end{Bmatrix}&=\sum_{i=0}^m{(-1)^{m-i}\over(m-i)!}\times{i^n\over i!}
\end{aligned}
\]
NTT 卷积即可。
列
求出 \(\forall i\in[1,n],\begin{Bmatrix}i\\k\end{Bmatrix}\) 的值。
做法:
考虑 EGF
\[\begin{aligned}
f(x)&=\sum_{i=0}^\infty\begin{Bmatrix}i\\k\end{Bmatrix}{x^i\over i!}\\
&=\sum_{i=0}^\infty{x^i\over i!}\sum_{j=0}^k{(-1)^{k-j}\over(k-j)!}\times{j^i\over j!}\\
&=\sum_{j=0}^k{(-1)^{k-j}\over(k-j)!}\times{j^i\over j!}\sum_{i=0}^\infty{x^i\over i!}\\
&=\sum_{j=0}^k{(-1)^{k-j}\over(k-j)!j!}\sum_{i=0}^\infty{(xj)^i\over i!}\\
&=\sum_{j=0}^k{(-1)^{k-j}\over(k-j)!j!}e^{xj}\\
&={\sum_{j=0}^k(-1)^{k-j}\binom{k}{j}e^{xj}\over k!}\\
&={(e^x-1)^k\over k!}
\end{aligned}
\]
多项式快速幂即可,由于是 EGF,答案最后要乘上 \(i!\)
第一类斯特林数
第一类斯特林数 \(\begin{bmatrix}n\\m\end{bmatrix}\) 表示将 \(n\) 个有标号的点放入 \(m\) 个圆排列的方案数,每个圆内至少有一个点。
\(\mathcal{O}(n^2)\)
考虑 \(\mathcal{O}(n^2)\) 递推
\[\begin{bmatrix}n\\ m\end{bmatrix}=\begin{bmatrix}n-1\\ m-1\end{bmatrix}+(n-1)\begin{bmatrix}n-1\\ m\end{bmatrix}
\]
也就是说,对于一个新增的点,你可以新开一个圆将其放进去,也可以放进原来的点的右边中,不难发现这样做是不会重的。
行
求出 \(\forall i\in[1,n],\begin{bmatrix}n\\i\end{bmatrix}\) 的值。
引理
\[x^{\overline n}=\sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}x^i
\]
考虑归纳证明
当 \(n=0\) 时,\(x^{\overline 0}=1,\begin{bmatrix}0\\0\end{bmatrix}=1\),等式成立。
当 \(n>0\) 时。
\[\begin{aligned}
x^{\overline{n+1}}&=x^{\overline n}(x+n)\\
&=(x+n)\sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}x^i\\
&=\sum_{i=1}^{n+1}\begin{bmatrix}n\\i-1\end{bmatrix}x^i+\sum_{i=0}^nn\begin{bmatrix}n\\i\end{bmatrix}x^i\\
&=\sum_{i=0}^{n+1}\left(\begin{bmatrix}n\\i-1\end{bmatrix}+n\begin{bmatrix}n\\i\end{bmatrix}\right)x^i\\
&=\sum_{i=0}^{n+1}\begin{bmatrix}n+1\\i\end{bmatrix}x^i\\
\end{aligned}
\]
得证。
所以说
\[\sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}x^i=\prod_{i=0}^{n-1}(x+i)
\]
考虑快速求 \(x^{\overline n}\)
考虑倍增,即 \(x^{\overline {2n}}=x^{\overline n}(x+n)^{\overline n}\)
考虑如何从 \(x^{\overline n}\) 推到 \((x+n)^{\overline n}\)
\[\begin{aligned}
(x+n)^{\overline n}&=\sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}(x+n)^i\\
&=\sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}\sum_{j=0}^i\binom{i}{j}x^jn^{i-j}\\
&=\sum_{j=0}^nx^j\sum_{i=j}^n\begin{bmatrix}n\\i\end{bmatrix}\binom{i}{j}n^{i-j}\\
&=\sum_{i=0}^nx^i\sum_{j=i}^n\begin{bmatrix}n\\j\end{bmatrix}{j!\over i!(j-i)!}n^{j-i}\\
&=\sum_{i=0}^n{1\over i!}x^i\sum_{j=i}^n\begin{bmatrix}n\\j\end{bmatrix}j!{n^{j-i}\over (j-i)!}\\
&=\sum_{i=0}^n{1\over i!}x^i\sum_{j=0}^{n-i}\begin{bmatrix}n\\n-(n-i-j)\end{bmatrix}(n-(n-i-j))!{n^j\over j!}\\
\end{aligned}
\]
设 \(a[i]=\begin{bmatrix}n\\i\end{bmatrix}i!\)
所以将 \(a\) reverse 一下,再和 \(n^j\over j!\) 卷起来就行了。
时间复杂度 \(\mathcal{O}(n\log n)\)
列
求出 \(\forall i\in[1,n],\begin{bmatrix}i\\k\end{bmatrix}\) 的值。
做法:
根据 \(\mathcal{O}(n^2)\) 递推公式,可得 \(\begin{bmatrix}n\\1\end{bmatrix}=(n-1)!\)
所以放在 \(EGF\) 上,即
\[\sum_{i=0}^\infty (i-1)!{x^i\over i!}=\sum_{i=0}^\infty {x^i\over i}
\]
所以 \(k\) 个圆排列的方案为
\[F^k(x)\over k!
\]
由于排列无标号,所以 \(1\over k!\)
然后就没了。
斯特林反演
[链接](file:///D:/%E5%BE%90%E6%B5%A9%E8%BD%A9/%E7%BB%83%E4%B9%A0/%E5%A4%9A%E9%A1%B9%E5%BC%8F/%E6%96%AF%E7%89%B9%E6%9E%97%E5%8F%8D%E6%BC%94.md)
拉格朗日反演
内容
有多项式 \(F(x),G(x)\),满足 \(F(G(x))=x\),那么有如下式子。
\[[x^n]F(x)={1\over n}[x^{-1}]{1\over G^n(x)}
\]
复合逆
由于 \(F(G(x))=x\),所以 \(G(x)=F^{-1}(x)\),即 \(G(F(x))=x\) 同样成立。
证明
将 \(F(G(x))\) 展开去写:
\[F(G(x))=\sum_{i=0}^n f_iG^i(x)
\]
那么有
\[\sum_{i=0}^n f_iG^i(x)=x
\]
两边同时求导,得
\[\sum_{i=1}^n if_{i}G^{i-1}(x)G'(x)=1
\]
两边同时除以 \(G^n(x)\).
\[\sum_{i=1}^n if_{i}G^{i-n-1}(x)G'(x)={1\over G^n(x)}
\]
考虑取 \([x^{-1}]\)
\[[x^{-1}]\sum_{i=1}^n if_{i}G^{i-n-1}(x)G'(x)=[x^{-1}]{1\over G^n(x)}
\]
试求等式左边的值:
当 \(i<n\) 时:
由于 \(i-n-1\geqslant0\),所以 \([x^{-1}]G^{i-n-1}(x)=0\) 且 \([x^{-1}]G'(x)=0\),所以 \([x^{-1}]\sum_{i=1}^n if_{i}G^{i-n-1}(x)G'(x)=0\)。
当 \(i=n\) 时
\[\begin{aligned}
\sum_{i=1}^n [i=n]if_{i}G^{i-n-1}(x)G'(x)&=nf_nG^{-1}(x)G'(x)\\
&=nf_n{\sum_{i=1}^nig_ix^{i-1}\over\sum_{i=1}^ng_ix^i}\\
&=nf_n{\sum_{i=1}^nig_ix^{i-1}\over g_1x}{1\over1+\sum_{i=2}^n{g_i\over g_1}x^{i-1}}\\
\end{aligned}
\]
观察一下后面那个分式,其 \([x^{-1}]\) 项为 \(0\),且 \([x^0]\) 项为 \(1\)。
而左边式子最低项为 \([x^{-1}]\),且值为 \({1\times g_1\over g_1}=1\)。
所以当 \(i=n\) 时,式子的值为 \(1\)。
带入原式,得
\[nf_n=[x^{-1}]{1\over G^n(x)}
\]
即
\[[x^n]F(x)={1\over n}[x^{-1}]{1\over G^n(x)}
\]
换一个形式
\[[x^n]F(x)={1\over n}[x^{n-1}]{x^n\over G^n(x)}
\]