DennyQi's Log

多项式求逆 - OI version

多项式求逆

多项式的逆

​ 如同一般整数的乘法逆元一样,我们可以定义多项式的“逆”。对于给出的一个n1n-1次多项式F(x)F(x),如果存在一个n1n-1次多项式,使得多项式乘法的结果F(x)G(x)F(x)*G(x)在对xnx^n取模后,只有常数项1,那么就把G(x)G(x)称为F(x)F(x)的逆,记作

F(x)G(x)1(modxn)F(x)*G(x) \equiv 1 \pmod {x^n}

​ 值得注意的是,多项式的取模和系数的取模是完全两码事。一个多项式可以理解成一个xx进制数。当多项式对xnx^n取模时,其实就是扔掉从xnx^n开始的所有高次项。即多项式的取模是为了限定项数的。

F(x)F(x)xnx^n的逆有几项呢?事实上,在多项式问题中,“几项”这个问题是不重要的,因为如果愿意,我们可以认为所有多项式都有无限项,只不过高次的系数都是0罢了。重要的是,多项式有多少项会对我们解决问题产生影响。在这个问题中,多项式的逆只有nn项对求解产生影响,所以如果模数是xnx^n,我们便可以认为G(x)G(x)F(x)F(x)都是nn项的多项式。

​ 多项式的逆是唯一的吗?我们知道整数的乘法逆元是唯一的,用反证法容易证明。而多项式的乘法本质上是系数的卷积。手动代入求解一下就可以发现多项式的逆也是唯一的:由F0F_0我们可以解出G0G_0就是F0F_0的乘法逆元,再根据方程F0G1+F1G00(modP)F_0G_1+F_1G_0 \equiv 0 \pmod P可以解得唯一的G1G_1。然后不停地解出G2,G3,...G_2,G_3,...,所以多项式的逆是唯一的。

求解多项式的逆

​ 我们可以给F(x)F(x)的高次项补0使得nn为2的幂次。由于多项式的逆是唯一的,因此补0后的G(x)G(x)就是补0后的F(x)F(x)的逆。而补0其实相当于什么事都没干。所以我们对nn做的变换是完全没有问题的。以下假定nn为2的幂次。

​ 假设已经求解出了对xn/2x^{n/2}取模后F(x)F(x)的逆H(x)H(x),则有

F(x)H(x)1(modxn/2)F(x)*H(x) \equiv 1 \pmod {x^{n/2}}

​ 根据多项式的逆的定义,又有

F(x)G(x)1(modxn/2)F(x)*G(x) \equiv 1 \pmod {x^{n/2}}

​ 因此

F(x)[G(x)H(x)]0(modxn/2)F(x)*[G(x)-H(x)] \equiv 0 \pmod {x^{n/2}}

​ 多项式可以当作一个xx进制数来理解,因此如果两数的乘积为0,其中至少有一个数为0。而因为我们假定了F(x)F(x)的逆是有解的,因此F(x)F(x)不能为0,所以

G(x)H(x)0(modxn/2)G(x)-H(x) \equiv 0 \pmod {x^{n/2}}

​ 也就是说G(x)G(x)H(x)H(x)的前n/2n/2项是一模一样的。现在,我们要开始考虑前nn项的问题了。由于这个新的多项式,不妨令它为P(x)=G(x)H(x)P(x)=G(x)-H(x),的前n/2n/2项都为0,我们用系数卷积思考一下就会发现,P2(x)P^2(x)的前n1n-1项都为0。也就是

G2(x)+H2(x)2G(x)H(x)0(modxn)G^2(x)+H^2(x)-2G(x)H(x) \equiv 0 \pmod {x^n}

​ 至此,我们已经将模数扩大为了xnx^n。我们在新的等式两边同时乘以F(x)F(x)

F(x)G2(x)+F(x)H2(x)2F(x)G(x)H(x)0(modxn)F(x)G^2(x)+F(x)H^2(x)-2F(x)G(x)H(x) \equiv 0 \pmod {x^n}

​ 先前我们假定了F(x)G(x)1(modxn)F(x)*G(x) \equiv 1 \pmod {x^n},所以可以代入化简得

G(x)+F(x)H2(x)2H(x)0(modxn)G(x)+F(x)H^2(x)-2H(x) \equiv 0 \pmod {x^n}

​ 即

G(x)2H(x)F(x)H2(x)(modxn)G(x) \equiv 2H(x)-F(x)H^2(x) \pmod {x^n}

G(x)H(x)[2F(x)H(x)](modxn)G(x) \equiv H(x)[2-F(x)*H(x)]\pmod {x^n}

​ 多项式求逆只需要按照上式递推即可。

​ 但这里有个问题。先前我们在思考H(x)H(x)的时候是在模xn/2x^{n/2}意义下的,而在这个式子里,当我们用到H(x)H(x)的时候是在模xnx^n意义下的,那么H(x)H(x)的高次项会有影响吗?事实上,我们已经通过证明保证了P2(x)P^2(x)的前n1n-1项都为0,而这之后的变换又都是等价变换,因此我们知道最终得到的结果是正确的,并且一定是与H(x)H(x)的高次项无关的。只需要保证前后的两个H(x)H(x)的高次项是相同的即可。