【线性代数】多项式各类算法总结

前言:

这可能是本蒟蒻在2018省选以前写的最难的东西了。
考虑到时间紧迫,所以有些东西我自己也不能完全理解,只能照搬课件。
只能以后再看机会填坑了

再说回多项式,几乎所有的多项式算法都是基于NTT的优化,也就是说,要想办法把所有的运算,转化为可以使用NTT优化的表达方式。

首先给出几个在之后的证明中可能用到的概念:
一个多项式 A A A的最高次幂,称为该多项式的度,记为 d e g A degA degA

多项式求逆

用数学语言表示,即对于一个多项式 A ( x ) A(x) A(x)
要找出一个对应的 B ( x ) B(x) B(x)满足 ( d e g B &lt; d e g A ) (degB &lt; degA) (degB<degA) A ( x ) B ( x ) ≡ 1 ( m o d ( x n ) ) A(x)B(x)\equiv 1(mod(x^n)) A(x)B(x)1(mod(xn))

用倍增的思路考虑这个问题,假设我们已经得到了一个 B ′ ( x ) B&#x27;(x) B(x)使得 A ( x ) B ′ ( x ) ≡ 1 ( m o d ( x ⌊ n 2 ⌋ ) ) A(x)B&#x27;(x)\equiv 1(mod(x^{\lfloor \frac n 2\rfloor })) A(x)B(x)1(mod(x2n))
现在希望通过 B ′ ( x ) B&#x27;(x) B(x) A ( x ) A(x) A(x)来表示出 B ( x ) B(x) B(x)
首先,很显然 A ( x ) B ( x ) ≡ 1 ( m o d ( x ⌊ n 2 ⌋ ) ) A(x)B(x) \equiv 1(mod(x^{\lfloor \frac n 2\rfloor })) A(x)B(x)1(mod(x2n))
所以很显然 B ( x ) − B ′ ( x ) ≡ 0 ( m o d ( x ⌊ n 2 ⌋ ) ) B(x)-B&#x27;(x)\equiv 0(mod(x^{\lfloor \frac n 2\rfloor })) B(x)B(x)0(mod(x2n))
两边同时平方,得到 B 2 ( x ) + B ′ 2 ( x ) − 2 B ( x ) B ′ ( x ) ≡ 0 ( m o d ( x n ) ) B^2(x)+B&#x27;^2(x)-2B(x)B&#x27;(x)\equiv 0 (mod(x^n)) B2(x)+B2(x)2B(x)B(x)0(mod(xn))

最神奇的一点就是,为什么平方过后,模数也可以跟着平方了:
由于原来左边的多项式在0到 n − 1 n-1 n1项的系数均为0,平方过后,每个在0到 2 ∗ n − 1 2*n-1 2n1之间的项,必有一个因子来源于 0 0 0 n − 1 n-1 n1,则说明平方过后,在0到 2 ∗ n − 1 2*n-1 2n1之间的项的系数仍然为0,所以在模 x n x^n xn下也为0。

代码:

void inv(int n,int *A,int *B){
   
    if(n==1){
   
        B[0]=fsp(A[0],MOD-2);
        return ;
    }
    inv((n+1)>>1,A,B);
    static int X[MAXN];
    int p=1;
    for(;p<(n<<1);p<<=1);
    for(int i=0;i<n;i++)
        X[i]=A[i];
    for(int i=n;i<p;i++)
        X[i]=0;
    ntt(X,p,1);
    for(int i=(n+1)>>1;i<p;i++)
        B[i]=0;
    ntt(B,p,1);
    for(int i=0;i!=p;i++)
        B[i]=(ll)B[i]*(2+MOD-(ll)X[i]*B[i]%MOD)%MOD;
    ntt(B,p,-1);
}

多项式除法及取模

给出多项式 A ( x ) 、 B ( x ) A(x)、B(x) A(x)B(x),求出多项式 D ( x ) 、 R ( x ) D(x)、R(x) D(x)R(x)
满足 A ( x ) = D ( x ) B ( x ) + R ( x ) A(x)=D(x)B(x)+R(x) A(x)=D(x)B(x)+R(x)
n = d e g A , m = d e g B n=degA,m=degB n=degA,m=degB
并且 d e g D ≤ d e g A − d e g B = n − m 、 d e g R ≤ m degD\leq degA-degB=n-m、degR\leq m degDdegAdegB=nmdegRm
定义一个 A R ( x ) = x n A ( 1 x ) A^R(x)=x^nA(\frac 1 x) AR(x)=xnA(x1)
A R ( x ) 为 A ( x ) A^R(x)为A(x) A

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值