牛顿迭代法
定义
在一般意义下,牛顿迭代法可以求出一个函数的零点,而在多项式意义下,牛顿迭代能够求出:给定一个 G ( x ) G(x) G(x),求 F ( x ) F(x) F(x),使得 G ( F ( x ) ) ≡ 0 ( m o d x n ) G(F(x)) \equiv 0\;\;\;(mod\;\;x^n) G(F(x))≡0(modxn)
推导
当
n
=
1
n=1
n=1时,单独求解
F
(
x
)
F(x)
F(x)的值。
当
n
>
1
n>1
n>1时,假设我们已经求出了
F
0
(
x
)
F_0(x)
F0(x)满足
G
(
F
0
(
x
)
)
=
0
(
m
o
d
x
⌈
n
2
⌉
)
G(F_0(x))=0\;\;\;(mod\;\;x^{\lceil \frac{n}{2} \rceil})
G(F0(x))=0(modx⌈2n⌉)。
考虑如何用
F
0
(
x
)
F_0(x)
F0(x)求出
F
(
x
)
F(x)
F(x)。
将
G
(
F
(
x
)
)
G(F(x))
G(F(x))在
F
0
(
x
)
F_0(x)
F0(x)处泰勒展开。
G
(
F
(
x
)
)
=
G
(
F
0
(
x
)
)
+
G
(
F
0
′
(
x
)
)
1
!
(
F
(
x
)
−
F
0
(
x
)
)
+
G
(
F
0
′
′
(
x
)
)
2
!
(
F
(
x
)
−
F
0
(
x
)
)
…
…
G(F(x))=G(F_0(x))+\frac{G(F_0'(x))}{1!}(F(x)-F_0(x))+\frac{G(F_0''(x))}{2!}(F(x)-F_0(x))……
G(F(x))=G(F0(x))+1!G(F0′(x))(F(x)−F0(x))+2!G(F0′′(x))(F(x)−F0(x))……
可以发现
F
(
x
)
−
F
0
(
x
)
F(x)-F_0(x)
F(x)−F0(x)的非零项大于
⌈
n
2
⌉
\lceil \frac{n}{2} \rceil
⌈2n⌉,因此有
(
F
(
x
)
−
F
0
(
x
)
)
2
(F(x)-F_0(x))^2
(F(x)−F0(x))2的非零项大于
n
n
n,所以有:
G
(
F
(
x
)
)
=
G
(
F
0
(
x
)
)
+
G
(
F
0
′
(
x
)
)
(
F
(
x
)
−
F
0
(
x
)
)
(
m
o
d
x
n
)
G(F(x))=G(F_0(x))+G(F'_0(x))(F(x)-F_0(x))\;\;\;(mod\;\;x^n)
G(F(x))=G(F0(x))+G(F0′(x))(F(x)−F0(x))(modxn)
因为
G
(
F
(
x
)
)
≡
0
(
m
o
d
x
n
)
G(F(x)) \equiv 0\;\;\;(mod\;\;x^n)
G(F(x))≡0(modxn),所以:
F
(
x
)
=
F
0
(
x
)
−
G
(
F
0
(
x
)
)
G
(
F
0
′
(
x
)
)
F(x)=F_0(x)-\frac{G(F_0(x))}{G(F_0'(x))}
F(x)=F0(x)−G(F0′(x))G(F0(x))
应用
多项式求逆:
已知多项式
A
(
x
)
A(x)
A(x),求一个多项式
F
(
x
)
F(x)
F(x),使得
F
(
x
)
A
(
x
)
≡
1
(
m
o
d
x
n
)
F(x)A(x)\equiv 1\;\;\;(mod\;\;x^n)
F(x)A(x)≡1(modxn)。
相当于求
F
(
x
)
F(x)
F(x)满足
A
(
x
)
−
1
F
(
x
)
≡
0
(
m
o
d
x
n
)
A(x)-\frac{1}{F(x)}\equiv 0\;\;\;(mod\;\;x^n)
A(x)−F(x)1≡0(modxn)
令
G
(
x
)
=
A
(
x
)
−
1
F
0
(
x
)
G(x)=A(x)-\frac{1}{F_0(x)}
G(x)=A(x)−F0(x)1
则根据牛顿迭代,有:
F
(
x
)
=
F
0
(
x
)
−
A
(
x
)
−
1
F
0
(
x
)
F
0
(
x
)
−
2
(
m
o
d
x
n
)
F(x)=F_0(x)-\frac{A(x)-\frac{1}{F_0(x)}}{F_0(x)^{-2}}\;\;\;(mod\;\;x^n)
F(x)=F0(x)−F0(x)−2A(x)−F0(x)1(modxn)
因此有:
F
(
x
)
=
F
0
(
x
)
(
2
−
F
0
(
x
)
A
(
x
)
)
(
m
o
d
x
n
)
F(x)=F_0(x)(2-F_0(x)A(x))\;\;\;(mod\;\;x^n)
F(x)=F0(x)(2−F0(x)A(x))(modxn)
因此递归求解
F
0
(
x
)
F_0(x)
F0(x)即可,感觉比倍增法的推导精妙一些(虽然求逆的倍增法和牛顿迭代的推法差不多)。
多项式开方:
已知多项式 A ( x ) A(x) A(x),求一个多项式 F ( x ) F(x) F(x),使得 F ( x ) 2 ≡ A ( x ) ( m o d x n ) F(x)^2\equiv A(x)\;\;\;(mod\;\;x^n) F(x)2≡A(x)(modxn)。
相当于求 F ( x ) F(x) F(x)满足 F ( x ) 2 − A ( x ) ≡ 0 ( m o d x n ) F(x)^2-A(x)\equiv 0\;\;\;(mod\;\;x^n) F(x)2−A(x)≡0(modxn)
令
G
(
x
)
=
F
0
(
x
)
2
−
A
(
x
)
G(x)=F_0(x)^2-A(x)
G(x)=F0(x)2−A(x)。
F
(
x
)
=
F
0
(
x
)
−
F
0
(
x
)
2
−
A
(
x
)
2
F
0
(
x
)
F(x)=F_0(x)-\frac{F_0(x)^2-A(x)}{2F_0(x)}
F(x)=F0(x)−2F0(x)F0(x)2−A(x)
因此:
F
(
x
)
=
F
0
(
x
)
+
A
(
x
)
2
F
0
(
x
)
(
m
o
d
x
n
)
F(x)=\frac{F_0(x)+A(x)}{2F_0(x)}\;\;\;(mod\;\;x^n)
F(x)=2F0(x)F0(x)+A(x)(modxn)
时间复杂度
O
(
n
l
g
n
)
O(nlgn)
O(nlgn),在
A
(
0
)
=
1
A(0)=1
A(0)=1时,常数项为
1
1
1,否则还需要二次剩余计算。
多项式exp:
已知多项式 A ( x ) A(x) A(x),求一个多项式 F ( x ) F(x) F(x),使得 F ( x ) = e A ( x ) ( m o d x n ) F(x)=e^{A(x)}\;\;\;(mod\;\;x^n) F(x)=eA(x)(modxn)。
相当于求 F ( x ) F(x) F(x)满足 ln F ( x ) ≡ A ( x ) ( m o d x n ) \ln F(x)\equiv A(x)\;\;\;(mod\;\;x^n) lnF(x)≡A(x)(modxn)
令 G ( x ) = ln F 0 ( x ) − A ( x ) G(x)=\ln F_0(x)-A(x) G(x)=lnF0(x)−A(x)。
把
F
0
(
x
)
F_0(x)
F0(x)当做一个常量,因此:
F
(
x
)
=
F
0
(
x
)
−
l
n
F
0
(
x
)
−
A
(
x
)
1
F
0
(
x
)
F(x)=F_0(x)-\frac{lnF_0(x)-A(x)}{\frac{1}{F_0(x)}}
F(x)=F0(x)−F0(x)1lnF0(x)−A(x)
即:
F
(
x
)
=
F
0
(
x
)
(
1
−
ln
F
0
(
x
)
+
A
(
x
)
)
F(x)=F_0(x)(1-\ln F_0(x)+A(x))
F(x)=F0(x)(1−lnF0(x)+A(x))
时间复杂度
O
(
n
l
g
n
)
O(nlgn)
O(nlgn),
A
(
0
)
=
0
A(0)=0
A(0)=0时,
F
(
0
)
=
1
F(0)=1
F(0)=1。
多项式k次幂
已知多项式 A ( x ) A(x) A(x)以及一个整数 k k k,求一个多项式 F ( x ) F(x) F(x),使得 F ( x ) = A ( x ) k ( m o d x n ) F(x)=A(x)^k\;\;\;(mod\;\;x^n) F(x)=A(x)k(modxn)。
相当于求
F
(
x
)
F(x)
F(x)满足
ln
F
(
x
)
−
k
ln
A
(
x
)
≡
0
(
m
o
d
x
n
)
\ln F(x)-k\ln A(x)\equiv 0\;\;\;(mod\;\;x^n)
lnF(x)−klnA(x)≡0(modxn)
也就是
F
(
x
)
−
e
k
ln
A
(
x
)
≡
0
(
m
o
d
x
n
)
F(x)-e^{k\ln A(x)}\equiv 0\;\;\;(mod\;\;x^n)
F(x)−eklnA(x)≡0(modxn)
因此先 ln \ln ln,再乘 k k k,再 e x p exp exp回去即可。
时间复杂度 O ( n l g n ) O(nlgn) O(nlgn)。