zoukankan      html  css  js  c++  java
  • 多项式开方。。(小朋友与二叉树)

    //没什么好说的。。。。。。。
    #include<stdio.h> #include<iostream> #include<algorithm> #include<math.h> #include<string.h> #define ll long long #define maxn 500005 #define P 998244353 #define inv2 (P+1)>>1 #define g 3 using namespace std; int n,m; int A[maxn],B[maxn],C[maxn] ; inline int add(int a,int b){ a+=b; return a>=P?a-P:a; } inline int sub(int a,int b){ a-=b; return a<0?a+P:a; } inline int mul(int a,int b){ return 1ll*a*b%P; } inline int ksm(int a,int b){ int ans=1; while(b){ if(b&1)ans=mul(ans,a); a=mul(a,a); b>>=1; } return ans; } int wi[maxn]; inline void NTT(int *p,int n,int tt){ int i,j,k,m,t0,t1; for(i=j=0;i<=n;++i){ if(i<j)swap(p[i],p[j]); for(k=n>>1;(j^=k)<k;k>>=1);//***** } wi[0]=1; for(m=1;m<n;m<<=1){ t0=ksm(g,(P-1+tt*(P-1)/(m<<1))); for(i=1;i<m;++i)wi[i]=mul(wi[i-1],t0); for(i=0;i<n;i+=(m<<1)){ for(j=0;j<m;++j){ t0=p[i+j]; t1=mul(p[i+j+m],wi[j]);//,cout<<wi[j]<<"--"<<endl; p[i+j]=add(t0,t1); p[i+j+m]=sub(t0,t1); } } } if(tt==-1){ t0=ksm(n,P-2); for(i=0;i<n;++i){ p[i]=mul(p[i],t0); } } } int inv_tmp[maxn]; inline void poly_inv(int *A,int *B,int n){ if(n==1){ B[0]=ksm(A[0],P-2); return; } poly_inv(A,B,n>>1); fill(B+(n>>1),B+(n<<1),0); copy(A,A+n,inv_tmp); fill(inv_tmp+n,inv_tmp+(n<<1),0); NTT(inv_tmp,n<<1,1); NTT(B,n<<1,1); for(int i=0;i<(n<<1);++i){ B[i]=mul(B[i],sub(2,mul(inv_tmp[i],B[i]))); } NTT(B,n<<1,-1); } int sqrt_a[maxn],sqrt_b[maxn]; inline void poly_sqrt(int *A,int *B,int n){ if(n==1){ B[0]=1; return; } poly_sqrt(A,B,n>>1); fill(B+(n>>1),B+(n<<1),0); copy(A,A+n,sqrt_a); fill(sqrt_a+n,sqrt_a+(n<<1),0); poly_inv(B,sqrt_b,n); fill(sqrt_b+n,sqrt_b+(n<<1),0); NTT(sqrt_a,n<<1,1); NTT(sqrt_b,n<<1,1); NTT(B,n<<1,1); for(int i=0;i<(n<<1);++i){ B[i]=mul(inv2,add(B[i],mul(sqrt_a[i],sqrt_b[i]))); } NTT(B,n<<1,-1); } int main(){ scanf("%d%d",&n,&m); int tt; for(int i=1;i<=n;++i){ scanf("%d",&tt); C[tt]=P-4; } C[0]=1; int kk=1; while(kk<=m){ kk<<=1; } poly_sqrt(C,B,kk); B[0]=(B[0]+1)%P; poly_inv(B,A,kk); for(int i=1;i<=m;++i){ printf("%d ",mul(A[i],2)); } return 0; }
  • 相关阅读:
    线程
    进程2
    进程
    socketserver
    黏包
    初始网络编程
    模块
    super
    mro c3算法
    日志固定格式
  • 原文地址:https://www.cnblogs.com/chenjingqi/p/9011348.html
Copyright © 2011-2022 走看看