前置知识
定义
简单来说,形如
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))∣0≤i≤n,i∈Z}为多项式
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=0∑∞aixi, g ( x ) = ∑ i = 0 ∞ b i x i \begin{aligned}g(x)=\sum_{i=0}^{\infty}b_ix^i\end{aligned} g(x)=i=0∑∞bixi
加法
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=0∑∞j+k=i∑(aj⋅bk)xi
多项式的其它运算
基本套路
从现在开始要用到牛顿迭代了
一般基本套路是运用牛顿迭代倍增求解
- 先构造一个复合多项式 g g g,使 g ( f ) = 0 g(f)=0 g(f)=0
- 对 g g g求导
- 牛顿迭代
为了方便阅读,下面把牛顿迭代再贴一次
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) f≡f0−g′(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)=f1−A=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)=(f0−1−A)′,将 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)=(f0−1−A)′=−f0−2=−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)
f≡f0−−f021f01−A( mod x2n)≡2f0−Af02( 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) f≡2f0−Af02( 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 f−A
我们知道
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}
f≡f−f01lnf0−A( mod x2n)≡f0(1−lnf0+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) f≡f0(1−lnf0+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)=f2−A
我们知道
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)
f≡f0−2f0f02−A( mod x2n)
时间复杂度
O
(
n
l
o
g
n
)
O(nlogn)
O(nlogn)
如有哪里讲得不是很明白或是有错误,欢迎指正
如您喜欢的话不妨点个赞收藏一下吧
如能得到推荐博主就更开心了
您的鼓励是博主的动力