描述
已知 (g(x)),求 (f(x)) 满足 (g(f(x)) equiv 0 pmod{x^n})。
方法
倍增。
设 (f_0(x)) 满足 (g(f_0(x)) equiv 0 pmod{x^{lceil frac{n}{2} ceil}})。
将 (g(x)) 在 (f_0(x)) 处泰勒展开,
[g(x) equiv sum_{i ge 0}frac{g^{(i)}(f_0(x))}{i!}(f(x) - f_0(x))^i equiv 0 pmod{x^n}
]
由于 (f(x)) 和 (f_0(x)) 的前 (lceil frac{n}{2} ceil - 1) 项相同,所以 (forall i ge 2,(f(x) - f_0(x))^i equiv 0 pmod{x^n})
所以
[g(x) equiv g(f_0(x)) + g'(f_0(x))(f(x) - f_0(x)) equiv 0 pmod{x^n}
]
移项可得
[f(x) = f_0(x) - frac{g(f_0(x))}{g'(f_0(x))}
]
用途
设 (h(x)) 为原多项式,
求逆
设
[g(f(x)) equiv frac{1}{f(x)} - h(x) equiv 0 pmod{x^n}
]
则
[egin{aligned}
f(x)
&equiv f_0(x) - frac{frac{1}{f_0(x)} - h(x)}{-frac{1}{f_0^2(x)}} pmod{x^n} \
&equiv f_0(x) + f_0(x) - f_0^2(x)h(x) pmod{x^n} \
&equiv f_0(x)(2 - f_0(x)h(x)) pmod{x^n} \
end{aligned}
]
时间复杂度为 (T(n) = T(frac{n}{2}) + O(nlog n) = O(n log n))。
开方
设
[g(f(x)) equiv f_0^2(x) - h(x) equiv 0 pmod{x^n}
]
则
[egin{aligned}
f(x)
&equiv f_0(x) - frac{f_0^2(x) - h(x)}{2f_0(x)} pmod{x^n} \
&equiv frac{1}{2}(f_0(x) - frac{h(x)}{f_0(x)})
end{aligned}
]
时间复杂度为 (O(n log n))。
exp
前置知识:((ln x)' = frac{1}{x})
设
[g(f(x)) equiv ln f(x) - h(x) equiv 0 pmod{x^n}
]
则
[egin{aligned}
f(x)
&equiv f_0(x) - frac{ln f_0(x) - h(x)}{frac{1}{f_0(x)}} pmod{x^n} \
&equiv f_0(x)(1 - ln f_0(x) + h(x)) pmod{x^n}
end{aligned}
]
时间复杂度为 (O(nlog n))。