记点笔记

本文介绍了一种高效的多项式求逆方法及其在多项式除法中的应用,并提供了多项式多点求值的分治策略,有助于深入理解多项式运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

N天前修习了一下多项式,就简要记录一下好了

多项式求逆:对于A(x),求出一个B(x)使得A(x)B(x)=1(mod xn)

n=1B(x)就是A(x)常数项的逆元

n>1时,考虑倍增

A(x)Bk(x)=1(mod xk)

假设已知Bn2

A(x)Bn2(x)=1(mod xn2)

由于A(x)Bn(x)=1(mod xn)=1(mod xn2)

Bn2(x)Bn(x)=0(mod xn2)

平方一下可以得到(n2的作用是保证翻倍后大于n

Bn2(x)22Bn2(x)Bn(x)+Bn(x)2=0(mod xn)

两边乘A(x)A(x)Bn2(x)22Bn2(x)+Bn(x)=0(mod xn)

则:Bn(x)=Bn2(x)(2A(x)Bn2(x))

每层做一次卷积即可,复杂度为O(nlogn+(n/2)log(n/2)+...)=O(nlogn)

多项式除法:有了多项式求逆,就可以做多项式除法了

A(x)=B(x)P(x)+R(x) 其中P(x)为商式,R(x)为余式

n,mA(x),B(x)的长度

考虑如何消去R(x)的影响

xn1A(x1)=xm1B(x1)xnmP(x1)+xn1R(x1)

由于xnF(x)=FR(x),即F(x)反转

AR(x)=BR(x)PR(x)+xnm+1RR(x)

AR(x)=BR(x)PR(x)(mod xnm+1)

求出多项式逆元后乘起来就求出了P(x),用P(x)就能求出R(x)

多项式多点求值
假设现在有个多项式F(x),然后有若干ai,要对于这些aiF(ai)的值。

考虑分治,假设我已经求到了[l,r]ai,那么F(x)

其实写起来特别简单,大概是这样:


void solve(int o,int l,int r,Poly u){
    u=u%s[o];
    if(l==r){
        ans[l]=u[0];
        return ;
    }
    int mid=l+r>>1;
    solve(o<<1,l,mid,u,v);
    solve(o<<1|1,mid+1,r,u,v);
}

时间复杂度O(nlog2n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值