暴力の多项式全家桶
因为我不会 NTT
其实是因为任意模数多项式乘法太毒瘤,所以需要暴力(?
冷门的不想写了(e.g. 下降幂多项式乘法),不可做的写不了啊(e.g. 复合)
目前仍属于口胡阶段,如果有时间我就写一份拿挑战多项式拍一下 .(UPD. 应该没太大问题(求逆还没测))
很多地方省略了 \(\pmod{x^c}\),\(c\) 是一个神奇的常数 .
非常 naive 的东西
多项式加减 & 数乘
????
时间复杂度 \(O(n)\) .
多项式乘法 / 卷积
代入定义暴力模拟即可 .
时间复杂度 \(O(n^2)\) .
多项式插值
平凡拉格朗日插值即可 .
具体的,考虑构造 \(n+1\) 个多项式 \(g_i(x)\),使得 \(g_i(x_i)=y_i\),且对于任意 \(i\neq j\) 有 \(g_i(x_j)=0\),然后 \(\displaystyle\sum_{i=0}^n g_i(x)\) 即是所求多项式 .
构造这个 \(g_i\),可以令 \(g_i(x)=y_i\ell_i(x)\),这样 \(\ell_i(x)\) 只取 \(\{0,1\}\),那么自然满足条件 .
令 \(\ell_i(x)\) 为
即可,当 \(x=x_i\) 时,每项都是 \(\dfrac{x_i-x_j}{x_i-x_j}=1\),当 \(x\neq x_i\) 时,一定有一项使得分子为 \(0\) .
所以我们就得到了拉格朗日插值公式:
上面设的 \(\ell_i(x)\) 称做拉格朗日基本多项式(插值基函数),\(L_n(x)\) 叫做拉格朗日插值多项式 .
时间复杂度 \(O(n^2)\) .
多项式多点求值
我们知道多项式单点求值有秦九韶算法,大概是乘法分配律,具体可以看奥赛之光里 CDsidi 出的一道题 T220475 .
于是单点求值被 \(O(n)\) 解决,于是多点求值被 \(O(n^2)\) 解决 .
多项式微积分
众所周知当 \(n\) 是自然数时有
于是把每一项单独拿出来处理,时间复杂度 \(O(n)\) .
求逆及其直接推广
多项式乘法逆
设 \(A,B\) 分别是所求多项式 \(F\) 和其乘法逆 \(F^{-1}\) 的各项系数 .
由定义知
不妨令 \(n>0\),于是把 \(B_0\) 拿出来得
即
边界 \(B_0=\dfrac1{A_0}\),我们知道 \(A_0\neq 0\),于是问题被解决了 .
直接模拟,时间复杂度 \(O(n^2)\) .
多项式带余除法
对于多项式 \(F\),定义 \(F^{\mathsf R}\) 为
(系数反转)
这个可以 \(O(n)\) 求 .
于是令 \(F(z)=Q(z)G(z)+H(z)\),则:
一次求逆可以算出 \(Q^{\mathsf R}\),然后可以轻易算出 \(R^{\mathsf R}\),这样也就算出 \(Q,R\) 了 .
时间复杂度 \(O(n^2)\) .
多项式 ln
令 \(G(z)=\ln F(z)\),两边求导,得
一次多项式求导,一次多项式求逆,一次多项式积分,时间复杂度 \(O(n^2)\) .
UPD.
令 \(G(z)=\ln F(z)\),\(F,G\) 的系数序列为 \(\{A\},\{B\}\),则有更简洁的做法:
(\(A_0=1\))
多项式 exp
令 \(G(z)=\exp F(z)\),两边求导,得
令 \(F,G\) 的系数序列为 \(\{A\},\{B\}\),于是按卷积的定义展开:
把 \(n+1\) 除过去,然后 \(n+1\) 换成 \(n\) 就得到
直接模拟,时间复杂度 \(O(n^2)\) .
(\(A_0=0\))
多项式幂函数
令 \(G(z)=F(z)^t\) .
不失一般性,令 \(F(z)\) 的常数项为 \(1\) .
先 \(\ln\) 再 \(\exp\),得
一次多项式 \(\ln\),一次多项式 \(\exp\),时间复杂度 \(O(n^2)\) .
从而多项式开根就是求 \(\dfrac 12\) 次方,也被解决 .
普通多项式与下降幂多项式间转换
下降幂多项式转普通多项式:乘上 \(\exp z\) 转成点值 EGF,然后插回去即可 .
普通多项式下降幂多项式:把上面的过程反过来 .
均是 \(O(n^2)\) .
多项式三角函数
根据欧拉公式有
于是
联立解二元一次方程组可得
推广到多项式就行了,两次多项式 exp,时间复杂度 \(O(n^2)\) .
tan 就是 sin/cos,一次求逆,时间复杂度 \(O(n^2)\) .
当然这个做法要求 \(-1\) 在模模数意义下有二次剩余,没有的情况应该是可以 complex 类模拟的(因为所有操作都是暴力的所以应该很好实现)(存疑).
多项式反三角函数
这个有很多做法啊 .
令 \(F(z)=\arcsin G(z)\),则两边求导再积分就得
一次卷积 / 幂,一次开根,一次求导,一次求逆,再一次卷积,时间复杂度 \(O(n^2)\) .
其他的类似吧,关键在于复合函数求导 .
Reference
以下是博客签名,正文无关
本文来自博客园,作者:Jijidawang,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/16417421.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ