【learning】多项式开根详解+模板

概述

多项式开跟是一个非常重要的知识点,许多多项式题目都要用到这一算法。

用快速数论变换,多项式求逆元和倍增法可以在$O(n log n)$的时间复杂度下求出一个$n$次多项式的开根。

 

前置技能

快速数论变换(NTT),多项式求逆元,二次剩余。

 

多项式的开根

给定一个多项式$A(x)$,其次数为$deg_A$,若存在一个多项式$B(x)$,使其满足$deg_B≤deg_A$,且$ B^2(x) \equiv A(x) (mod\ x^n)$,则$B(x)$即为$A(x)$在模$x^n$意义下的的开根。

 

求多项式的开根

我们不妨假设,$n=2^k,k∈N$。

若$n=1$,则$b_0^2 \equiv a_0(mod\ x)$。其中$a_0$,$b_0$表示多项式$A$和多项式$B$的常数项。

若需要求出$b_0$,直接用二次剩余求出即可。(不过由于大部分题目公式特别优美,常数项通常为0)

当$n>1$时:

我们假设在模$x^{\frac{n}{2}}$的意义下$A(x)$的开根$B'(x)$我们已经求得。

依据定义,则有

$B^2(x)\equiv A(x) (mod\ x^{n})$          $(1)$

因为多项式$B'(x)$满足

$B'^2(x)\equiv A(x) (mod\ x^{\frac{n}{2}})$          $(2)$

将$(1)-(2)$,得

$B^2(x)-B'^2(x)\equiv 0(mod\ x^{\frac{n}{2}})$          $(3)$

我们用平方差公式将$(3)$展开

$(B(x)+B'(x))(B(x)-B'(x))\equiv 0(mod\ x^{\frac{n}{2}})$          $(4)$

然后我们会发现多项式$B(x)$有两个解,下面考虑其中一种情况

$B(x)-B'(x)\equiv 0(mod\ x^{\frac{n}{2}})$          $(5)$

我们将$(5)$式同余符号两边平方,得

$B^2(x)-2B(x)B'(x)+B'^2(x)\equiv 0(mod\ x^n)$          $(6)$

考虑到式$(1)$,我们将式$(1)$代入式$(6)$,得

$A(x)-2B(x)B'(x)+B'^2(x)\equiv 0(mod\ x^n)$          $(7)$

最后对式 $(7)$进行移项,得到

$B(x)\equiv \dfrac{A(x)+B'^2(x)}{2B'(x)} (mod\ x^n)$          $(8)$

 

显然,我们可以用上述式子,通过倍增,求出n次项的$B(x)$。

这一步的计算我们可以使用多项式求逆元和$NTT$,时间复杂度为$O(n log n)$。

我们可以通过递归的方法,求解出最终的$N$次项的$B(x)$

时间复杂度$T(n)=T(\dfrac{n}{2})+O(n log n)=O(n log n)$。

 

模板如下:(暂时还没有)

 

转载于:https://www.cnblogs.com/xiefengze1/p/9373272.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值