zoukankan      html  css  js  c++  java
  • BZOJ3501 : PA2008 Cliquers Strike Back

    [egin{eqnarray*}ans&=&m^{sum_{i=1}^n Stirling2(n,i)mod 999999598}mod 999999599\
    &=&m^{B_nmod 999999598}mod 999999599end{eqnarray*}]

    999999598=2*13*5281*7283,对于每个小质数依次计算,最后用中国剩余定理合并即可。

    对于贝尔数,有

    [egin{eqnarray*}B_{p+n}&equiv&B_n+B_{n+1}(mod p)\
    B_{p^m+n}&equiv&mB_n+B_{n+1}(mod p)end{eqnarray*}]

    根据这两个公式,可以从高位到低位递推,当$n<p$时直接输出解。时间复杂度$O(p^2log p)$。

    #include<cstdio>
    typedef long long ll;
    const int N=7284,P=999999598;
    ll n,m;int a[4]={2,13,5281,7283},f[N],s[2][N],i,j,x;
    int cal(int x,ll n){
      int i,j,k,m=0,b[N],c[N],d[70];
      for(i=0;i<=x;i++)b[i]=f[i]%x;
      while(n)d[m++]=n%x,n/=x;
      for(i=1;i<m;i++)for(j=1;j<=d[i];j++){
        for(k=0;k<x;k++)c[k]=(b[k]*i+b[k+1])%x;
        c[x]=(c[0]+c[1])%x;
        for(k=0;k<=x;k++)b[k]=c[k];
      }
      return c[d[0]];
    }
    ll pow(ll a,ll b,ll p){ll t=1;for(a%=p;b;b>>=1LL,a=a*a%p)if(b&1LL)t=t*a%p;return t;}
    ll bell(ll n){
      if(n<N)return f[n];
      ll t=0;
      for(int i=0;i<4;i++)t=(t+(P/a[i])*pow(P/a[i],a[i]-2,a[i])%P*cal(a[i],n)%P)%P;
      return t;
    }
    int main(){
      f[0]=f[1]=s[0][0]=1,s[0][1]=2;
      for(i=2,x=1;i<N;i++,x^=1)for(f[i]=s[x][0]=s[x^1][i-1],j=1;j<=i;j++)s[x][j]=(s[x^1][j-1]+s[x][j-1])%P;
      scanf("%lld%lld",&n,&m);
      printf("%lld",pow(m,bell(n),P+1));
      return 0;
    }
    

      

  • 相关阅读:
    docker进入mysql命令窗口
    dyoYQoyfRb
    2018icpc 徐州h题
    求逆元
    取模的n种情况
    Eratos筛法(筛选素数)
    扩展欧几里得
    函数库里有三角函数 和反三角函数
    HDU2795线段树入门 简单查询和修改
    快速排序 分析
  • 原文地址:https://www.cnblogs.com/clrs97/p/4714467.html
Copyright © 2011-2022 走看看