已知 f ( x ) f(x) f(x),求 g ( x ) = f ( x ) 1 2 ( m o d x n ) g(x) = f(x)^{\frac 12} \pmod{x^n} g(x)=f(x)21(modxn)
保证常数项为 1 1 1
算法 1 1 1: g ( x ) = exp ( ln f ( x ) 2 ) g(x) = \exp(\frac {\ln f(x)}2) g(x)=exp(2lnf(x)) O ( n log n ) O(n\log n) O(nlogn)
算法 2 2 2: g ( x ) 2 = f ( x ) ( m o d x n ) g(x)^2 = f(x) \pmod{x^n} g(x)2=f(x)(modxn)
g ( x ) 2 − f ( x ) = 0 g(x)^2-f(x)=0 g(x)2−f(x)=0
牛顿迭代。
g 1 ( x ) = g 0 ( x ) − g 0 ( x ) 2 − f ( x ) 2 g 0 ( x ) = g 0 ( x ) 2 + f 0 ( x ) 2 g 0 ( x ) g_1(x)=g_0(x)-\frac {g_0(x)^2-f(x)}{2g_0(x)}=\frac {g_0(x)}2+\frac{f_0(x)}{2g_0(x)} g1(x)=g0(x)−2g0(x)g0(x)2−f(x)=2g0(x)+2g0(x)f0(x)
T ( n ) = T ( n 2 ) + O ( n log n ) = O ( n log n ) T(n) = T(\frac n2) + O(n\log n) = O(n\log n)