多项式

17 篇文章 0 订阅
3 篇文章 1 订阅

也许更好的阅读体验

前置知识

FFT
牛顿迭代
求导


定义

简单来说,形如 a 0 x 0 + a 1 x 1 + a 2 x 2 + ⋯ + a n x n a_0x^0+a_1x^1+a_2x^2+\cdots+a_nx^n a0x0+a1x1+a2x2++anxn,的代数表达式叫做多项式
可以记作 f ( x ) = a 0 x 0 + a 1 x 1 + a 2 x 2 + ⋯ + a n x n f(x)=a_0x^0+a_1x^1+a_2x^2+ \cdots+a_nx^n f(x)=a0x0+a1x1+a2x2++anxn
其中 a 0 , a 1 , ⋯   , a n a_0,a_1,\cdots,a_n a0,a1,,an叫做多项式的系数, x x x是一个不定元,不表示任何值
不定元在多项式中最大项的次数称作多项式的次数


多项式的表示法

系数表示法

像刚刚我们提到的那些多项式,都是以系数形式表示的,也就是将 n n n次多项式 f ( x ) f(x) f(x)的系数 a 0 , a 1 , ⋯   , a n a_0,a_1,\cdots,a_n a0,a1,,an看作 n + 1 n+1 n+1维向量 a → = ( a 0 , a 1 , ⋯   , a n ) \overrightarrow{a}=(a_0,a_1,\cdots,a_n) a =(a0,a1,,an),其系数表示就是向量 a → \overrightarrow{a} a

点值表示法

如果 n + 1 n+1 n+1个不同的数 x 0 , x 1 , ⋯   , x n x_0,x_1,\cdots,x_n x0,x1,,xn对多项式进行求值,得到 f ( x 0 ) , f ( x 1 ) , ⋯   , f ( x n ) f(x_0),f(x_1),\cdots,f(x_n) f(x0),f(x1),,f(xn),那么就称 { ( x i , f ( x i ) ) ∣ 0 ≤ i ≤ n , i ∈ Z } \left\{ \left( x_{i},f\left( x_{i}\right) \right)|0\leq i\leq n,i\in Z\right\} {(xi,f(xi))0in,iZ}为多项式 f ( x ) f(x) f(x)的点值表示
注意, n + 1 n+1 n+1个点值只能表示 n n n次多项式


多项式的基本运算

两个多项式 f ( x ) = ∑ i = 0 ∞ a i x i \begin{aligned}f(x)=\sum_{i=0}^{\infty}a_ix^i\end{aligned} f(x)=i=0aixi g ( x ) = ∑ i = 0 ∞ b i x i \begin{aligned}g(x)=\sum_{i=0}^{\infty}b_ix^i\end{aligned} g(x)=i=0bixi

加法

h ( x ) = f ( x ) + g ( x ) = ∑ i = 0 ∞ ( a i + b i ) x i \begin{aligned}h(x)=f(x)+g(x)=\sum_{i=0}^{\infty}(a_i+b_i)x^i\end{aligned} h(x)=f(x)+g(x)=i=0(ai+bi)xi

乘法

f ( x ) = f ( x ) ∗ g ( x ) = ∑ i = 0 ∞ ∑ j + k = i ( a j ⋅ b k ) x i \begin{aligned}f(x)=f(x)*g(x)=\sum_{i=0}^{\infty}\sum_{j+k=i} (a_j\cdot b_k)x^i\end{aligned} f(x)=f(x)g(x)=i=0j+k=i(ajbk)xi


多项式的其它运算

基本套路

从现在开始要用到牛顿迭代了
一般基本套路是运用牛顿迭代倍增求解

  1. 先构造一个复合多项式 g g g,使 g ( f ) = 0 g(f)=0 g(f)=0
  2. g g g求导
  3. 牛顿迭代

为了方便阅读,下面把牛顿迭代再贴一次

f ≡ f 0 − g ( f 0 ) g ′ ( f 0 ) (   m o d   x 2 n ) f\equiv f_{0}-\dfrac {g\left( f_{0}\right) }{g'\left( f_{0}\right) }\left(\ mod\ x^{2n}\right) ff0g(f0)g(f0)( mod x2n)

有一个多项式 A A A

多项式求逆

f = 1 A f=\dfrac{1}{A} f=A1,求 f f f的前 n n n

构造 g ( f ) = 1 f − A = 0 g\left( f\right) =\dfrac {1}{f}-A=0 g(f)=f1A=0,我们知道 f f f的常数项为 A A A的常数项的逆元,接下来开始迭代
此时有 g ′ ( f 0 ) = − 1 f 0 2 g'(f_0)=-\dfrac{1}{f_0^2} g(f0)=f021

g ′ ( f 0 ) = ( f 0 − 1 − A ) ′ g'(f_0)=(f_0^{-1}-A)' g(f0)=(f01A),将 A A A看为常数项
g ′ ( f 0 ) = ( f 0 − 1 − A ) ′ = − f 0 − 2 = − 1 f 0 2 g'(f_0)=(f_0^{-1}-A)'=-f^{-2}_0=-\dfrac{1}{f_0^2} g(f0)=(f01A)=f02=f021

根据牛顿迭代
f ≡ f 0 − 1 f 0 − A − 1 f 0 2 (   m o d   x 2 n ) ≡ 2 f 0 − A f 0 2 (   m o d   x 2 n ) f\equiv f_0-\dfrac{\dfrac{1}{f_0}-A}{-\dfrac{1}{f_0^2}}\left(\ mod\ x^{2n}\right)\equiv2f_0-Af_0^2\left(\ mod\ x^{2n}\right) ff0f021f01A( mod x2n)2f0Af02( mod x2n)
至此,我们推完了,拿出来,写在下面

f ≡ 2 f 0 − A f 0 2 (   m o d   x 2 n ) f\equiv2f_0-Af_0^2\left(\ mod\ x^{2n}\right) f2f0Af02( mod x2n)

现在我们可以由 f 0 f_0 f0去推 f f f,每次这个模数 x y x^y xy y y y会乘以2,也就是说是倍增的
初始时 n = 1 n=1 n=1
时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)

多项式求ln

f = l n   g f=ln\ g f=ln g的前 n n n
我们对其求导
f ′ ( x ) = g ′ ( x ) g ( x ) f'\left( x\right) =\dfrac {g'(x)}{g\left( x\right) } f(x)=g(x)g(x)

复合求导
ln -> u
g -> v

这样,我们只要对 g g g求逆,然后对 g g g求导得 g ′ g' g,之后我们就得到了 f ′ f' f,再对其积分得到 f f f
求导和积分都是 O ( n ) O(n) O(n)
时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)

多项式exp

f = e A f=e^A f=eA ( A A A的常数项为 0 0 0)的前 n n n

构造 g ( f ) = l n   f − A g(f)=ln\ f-A g(f)=ln fA
我们知道 f f f的常数项为 1 1 1
g g g求导, g ′ ( f 0 ) = 1 f 0 g'(f_0)=\dfrac{1}{f_0} g(f0)=f01
根据牛顿迭代
f ≡ f − l n f 0 − A 1 f 0 (   m o d   x 2 n ) ≡ f 0 ( 1 − ln ⁡ f 0 + A ) (   m o d   x 2 n ) \begin{aligned}f&\equiv f-\dfrac {lnf_{0}-A}{\dfrac {1}{f_{0}}}\left(\ mod\ x^{2n}\right)\\ &\equiv f_{0}\left( 1-\ln f_{0}+A\right) \left(\ mod\ x^{2n}\right) \end{aligned} fff01lnf0A( mod x2n)f0(1lnf0+A)( mod x2n)

至此,我们推完了,拿出来,写在下面

f ≡ f 0 ( 1 − ln ⁡ f 0 + A ) (   m o d   x 2 n ) f\equiv f_{0}\left( 1-\ln f_{0}+A\right) \left(\ mod\ x^{2n}\right) ff0(1lnf0+A)( mod x2n)

还是倍增
l n ln ln和多项式乘法都是 O ( n l o g n ) O(nlogn) O(nlogn)的,加法是 O ( n ) O(n) O(n)
时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)

多项式开方

f = A f=\sqrt {A} f=A ( A A A的常数项存在平方根)的前 n n n

构造 g ( f ) = f 2 − A g(f)=f^2-A g(f)=f2A
我们知道 f f f的常数项为 A A A常数项的平方根
可用二次剩余方法解
g g g求导 g ′ ( f 0 ) = 2 f 0 g'(f_0)=2f_0 g(f0)=2f0
根据牛顿迭代
f ≡ f 0 − f 0 2 − A 2 f 0 (   m o d   x 2 n ) f\equiv f_{0}-\dfrac {f^{2}_{0}-A}{2f_{0}}\left(\ mod\ x^{2n}\right) ff02f0f02A( mod x2n)
时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)

如有哪里讲得不是很明白或是有错误,欢迎指正
如您喜欢的话不妨点个赞收藏一下吧
如能得到推荐博主就更开心了
您的鼓励是博主的动力

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值