多项式合集

多项式乘法

FFT

这里

NTT

可以求出两个多项式相乘结果系数对任意NTT模数(可以表示为\(a\times2^b+1\)形式的质数)取模的结果。

其实只要把FFT里的单位副根变为该模数的原根就好了。

常见的NTT模数为998244353,原根为3。

code:

void NTT(vector<int>&f,ci l,ci len,ci op){
    if(len&1)return;
    for(int i=l;i<l+len;++i)cpy[i]=f[i];
    int nw=l-1,ln=len>>1;
    for(int i=l;i<l+ln;++i)f[i]=cpy[++nw],f[i+ln]=cpy[++nw];
    NTT(f,l,ln,op),NTT(f,l+ln,ln,op);
    int rt=POW(g,(mod-1)/len),t;
    op?rt=POW(rt,mod-2):0;
    nw=1;
    for(int i=l;i<l+len;++i)cpy[i]=f[i];
    for(int i=l;i<l+ln;++i,nw=1ll*nw*rt%mod)t=1ll*nw*cpy[i+ln]%mod,f[i]=(cpy[i]+t)%mod,f[i+ln]=(cpy[i]-t+mod)%mod;
}

多项式求逆

这里

剩下的待更新...

猜你喜欢

转载自www.cnblogs.com/xryjr233/p/10592862.html
今日推荐