多项式填坑。。?

多项式填坑。。?

大概就是填填坑了。

多项式带余除法

这东西啥啊。怎么还带翻转的。

别指望我写推导,丢个代码块就跑。

而且还是我美妙无比的多项式模板。(牛顿迭代自己\(yy\)循环写法的真的就我一个吗?)

inline void Inv(int *A,int *B,int n){
    B[0]=Pow(A[0],MOD-2);
    for(RG int m=2;m<n<<1;m<<=1){
        for(RG int i=0;i<m;++i) tmp[i]=B[i],B[i]=Plu(B[i],B[i]);
        Mul_i(A,tmp,tmp,m);
        for(RG int i=0;i<m<<1;++i) B[i]=Plu(B[i],MOD-tmp[i]);
    }
}
inline void Mod(int *A,int *B,int *C,int *D,int n,int m){
    reverse(A,A+n),reverse(B,B+m),Inv(B,C,n-m+1);
    Mul(A,C,C,n),reverse(C,C+n-m+1),reverse(A,A+n),reverse(B,B+m);
    for(RG int i=n-m+1;i<n;++i) C[i]=0;
    Mul(B,C,D,m); for(RG int i=0;i<m;++i) D[i]=Plu(A[i],MOD-D[i]);
}

原柿子是\(A=B*C+D\),这里\(ABCD\)都是多项式。

这个要注意每个多项式的长度,弄错挺麻烦的,如果\(WA\)了记得多调调数组长度。

还有就是记得清空\(C\)数组的后面那一截。


线性齐次常系数递推

应该没打错名字

同样是一波精妙无比的推导。你发现跟做快速幂一样就行了。

先乘再模,其他就是快速幂。

然而这种常数大到难以置信的\(nlog^2n\)已经没有救了。。。

同样是要用到多项式取模,某些\(DFT\)是可以省掉的,然而我懒得改了。

这种常数大大大大大大大的东西大概真的没救了。。。。

int rem[N<<2],B[N<<2],C[N<<2];
inline void Mod(int *A,int *D,int n,int m){
    reverse(A,A+n),Mul(A,rem,C,n),reverse(C,C+n-m+1),reverse(A,A+n);
    for(RG int i=n-m+1;i<n;++i) C[i]=0;
    Mul(B,C,C,m); for(RG int i=0;i<m;++i) D[i]=Plu(A[i],MOD-C[i]);
    for(RG int i=m;i<n;++i) D[i]=0;
}
inline void Powp(int K,int *ans,int *Bas,int y){
    Bas[1]=1,ans[0]=1;
    while(y){
        if(y&1) Mul(ans,Bas,ans,K+K-1),Mod(ans,ans,K+K-1,K+1);
        Mul(Bas,Bas,Bas,K+K-1),Mod(Bas,Bas,K+K-1,K+1),y>>=1;
    }   return ;
}

记得预处理东西卡卡常啊。。。(\(BC\)全局不变直接算出来)


剩下的东西找时间再更。

转载于:https://www.cnblogs.com/Lovemona/p/10447696.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值