10/20/2025杂题 关于在线性时间内求解低次多项式的幂
例
设 \(g = ax^2 + bx + c\),求:
\[
f = g^n
\]
其中 \(0 \leq n \leq 3 \times 10^5\)。结果对 \(10^9 + 7\) 取模。
首先可以直接用 MTT 在 \(O(n \log n)\) 的时间复杂度内求解。然而此做法常数太大,在需要多次求解时效率低下。这里我们介绍一种能在 \(O(n)\) 时间复杂度内求解问题的较小常数解法。
考虑对原式求导。根据复合函数求导法则:
\[
(f(g(x)))' = f'(g(x)) g'(x)
\]
有:
\[
f' = n g^{n-1} g'
\]
由于:
\[
g^{n-1} = \frac{f}{g}
\]
所以:
\[
f' = n \frac{f}{g} g'
\]
\[
f' g = n f g'
\]
\[
[x^k] f' g = [x^k] n f g'
\]
\[
f'_k g_0 + f'_{k-1} g_1 + f'_{k-2} g_2 = n (f_k g'_0 + f_{k-1} g'_1)
\]
\[
(k+1) f_{k+1} g_0 + k f_k g_1 + (k-1) f_{k-1} g_2 = n f_k g'_0 + n f_{k-1} g'_1
\]
\[
f_{k+1} = \frac{n f_k g'_0 + n f_{k-1} g'_1 - k f_k g_1 - (k-1) f_{k-1} g_2}{(k+1)g_0}
\]
先求出边界 \(f_0 = g_0^n\),然后就可以递推了。预处理 \(k+1,g_0\) 的逆元,时间复杂度为 \(O(n)\),常数比 MTT 小很多。

浙公网安备 33010602011771号