多项式求逆


多项式求逆元

已知一度数为n的多项式\(A(x)\)

\[A(x)B(x)\equiv1\pmod {x^n} \]

\(B(x)\)即为\(A(x)\)的逆元。

多项式的除法、\(\exp\)\(\ln\)都是基于多项式求逆的。

通常用倍增法处理多项式求逆问题。

开始推式子……

\[\begin{aligned} &AB'\equiv1\pmod {x^{\lceil\frac n 2\rceil}}\\ &A(B-B’)\equiv 0 \pmod {x^{\lceil\frac n 2\rceil}}\\ &B-B’\equiv 0 \pmod {x^{\lceil\frac n 2\rceil}}\\ &(B-B’)^2\equiv 0 \pmod {x^n}\\ &B^2+B'^2-2BB'\equiv 0 \pmod {x^n}\\ &A(B^2+B'^2-2BB')\equiv 0 \pmod {x^n}\\ &B-2B'+AB'^2\equiv 0 \pmod {x^n}\\ &B\equiv 2B'-AB'^2\pmod {x^n}\\ &B\equiv B'(2-AB')\pmod {x^n}\\ \end{aligned} \]

这样我们可以从\(x^n\)递归到\(x^0\)

使用NTT加速运算,复杂度\(O(n \log n)\)

ll qp(ll d,ll c)
{
	ll res=1;
	while(c)
	{
		if(c&1) res=d*res%mod;
		d=d*d%mod,c>>=1;
	}
	return res;
} 
void ntt(ll *a,int type)
{
	for(int i=0;i>1]>>1)|((i&1)<<(bit-1));
	for(int i=0;i