多项式幂函数

模板题:Luogu P5245、Luogu P5273。

给定一个 $n-1$ 次多项式 $A(x)$,求一个在 $\bmod\ x^n$ 意义下的多项式 $B(x)$,使得 $B(x) \equiv (A(x))^k \ (\bmod\ x^n)$。多项式的系数在 $\bmod {998244353}$ 的意义下进行运算。

特殊情况:$A_0=1$

即 Luogu P5245。

算法 1:倍增法

$$(A(x))^k \equiv (A(x))^{k \bmod 998244353} \pmod {998244353}$$

直接用类似于整数快速幂的思想做即可,时间复杂度为 $O(n \log n \log (k \bmod 998244353))$。

提交记录 备份

算法 2

由于$a^b=e^{b\ln a}$,所以可以先求 $k \ln A(x)$,然后再 $\exp$ 回来。这样就可以取模了。

多项式求逆 + 多项式指数函数 + 多项式对数函数,时间复杂度 $O(n\log n)$。

普通版

提交记录 备份

高度封装版

提交记录 备份

一般情况

即 Luogu P5273。

算法 1:倍增法

算法 2

算法大体同上,只需注意:

  1. 判断 $A(x)$ 开头的零;
  2. 若 $A(x)$ 从头开始数的第一个数不为 $1$,需要将每一个数都乘上它的逆元,并在最后做一些处理。

普通版

提交记录 备份

高度封装版

提交记录 备份

提交记录 备份

短多项式幂

题目描述

给定 $d$ 阶多项式 $F(x)$,$d$ 的大小几乎为常数。

求 $F^k(x) \bmod x^{n+1}$。

系数对大质数取模。

简要思路

设 $F(x)=F^k(x)$,两边求导得到:

$$G'(x)=kF^{k-1}(x)F'(x)$$

$$G'(x)F(x)=kF^k(x)F'(x)$$

$$G'(x)F(x)=kF'(x)G(x)$$

$$\sum\limits_{i=0}^d[x^{n-i}]G'(x)[x^i]F(x)=k\sum\limits_{i=0}^{d-1}[x^i]F'(x)[x^{n-i}]G(x)$$

$$\sum\limits_{i=0}^d(n-i+1)[x^{n-i+1}]G(x)[x^i]F(x)=k\sum\limits_{i=0}^{d-1}[x^i]F'(x)[x^{n-i}]G(x)$$

注意到左边出现了 $[x^{n+1}]G(x)$,带入这个式子,即可递推 $G(x)$ 的每一项。