多项式对数函数|指数函数
描述¶
给定多项式 f(x),求模 x^{n} 意义下的 \ln{f(x)} 与 \exp{f(x)}。
解法¶
普通方法¶
首先,对于多项式 f(x),若 \ln{f(x)} 存在,则由其 定义,其必须满足:
[x^{0}]f(x)=1
对 \ln{f(x)} 求导再积分,可得:
\begin{aligned}
\frac{\mathrm{d} \ln{f(x)}}{\mathrm{d} x} & \equiv \frac{f'(x)}{f(x)} & \pmod{x^{n}} \\
\ln{f(x)} & \equiv \int \mathrm{d} \ln{x} \equiv \int\frac{f'(x)}{f(x)} \mathrm{d} x & \pmod{x^{n}}
\end{aligned}
多项式的求导,积分时间复杂度为 O(n),求逆时间复杂度为 O(n\log{n}),故多项式求 \ln 时间复杂度 O(n\log{n})。
首先,对于多项式 f(x),若 \exp{f(x)} 存在,则其必须满足:
[x^{0}]f(x)=0
否则 \exp{f(x)} 的常数项不收敛。
对 \exp{f(x)} 求导,可得:
\frac{\mathrm{d} \exp{f(x)}}{\mathrm{d} x} \equiv \exp{f(x)}f'(x)\pmod{x^{n}}
比较两边系数可得:
[x^{n-1}]\frac{\mathrm{d} \exp{f(x)}}{\mathrm{d} x} = \sum_{i = 0}^{n - 1} \left([x^{i}]\exp{f(x)}\right) \left([x^{n-i-1}]f'(x)\right)
n[x^{n}]\exp{f(x)} = \sum_{i = 0}^{n} \left([x^{i}]\exp{f(x)}\right) \left((n - i + 1)[x^{n - i}]f(x)\right)
又 [x^{0}]f(x)=0,则:
n[x^{n}]\exp{f(x)} = \sum_{i = 0}^{n - 1} \left([x^{i}]\exp{f(x)}\right) \left((n - i + 1)[x^{n - i}]f(x)\right)
使用分治 FFT 即可解决。
时间复杂度 O(n\log^{2}{n})。
Newton's Method¶
使用 Newton's Method 即可在 O(n\log{n}) 的时间复杂度内解决多项式 \exp。
代码¶
多项式 ln/exp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | |
例题¶
- 计算 f^{k}(x)
普通做法为多项式快速幂,时间复杂度 O(n\log{n}\log{k})。
当 [x^{0}]f(x)=1 时,有:
f^{k}(x)=\exp{(k\ln{f(x)})}
当 [x^{0}]f(x)\neq 1 时,设 f(x) 的最低次项为 f_{i}x^{i},则:
f^{k}(x)=f_{i}^{k}x^{ik}\exp{(k\ln{\frac{f(x)}{f_{i}x^{i}}})}
时间复杂度 O(n\log{n})。
build本页面最近更新:,更新历史
edit发现错误?想一起完善? 在 GitHub 上编辑此页!
people本页面贡献者:OI-wiki
copyright本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用