P4091 [HEOI2016 / TJOI2016] summation (Stirling numbers of second kind, ntt)

Questions surface: https: //www.luogu.org/problem/P4091

题解:\[\begin{array}{l}
f(n) = \sum\limits_{i = 0}^n {\sum\limits_{j = 0}^i {{\rm{S}}(i,j) \cdot {2^{\rm{j}}} \cdot j!} } \\
 = \sum\limits_{i = 0}^n {\sum\limits_{j = 0}^n {{\rm{S}}(i,j) \cdot {2^{\rm{j}}} \cdot j!} }
\end{array}\]

The formula \ [S (n, m) = \ frac {{\ sum \ limits_ {i = 0} ^ m {{{(- 1)} ^ i} {\ rm {\ cdot}} C_m ^ i} { \ rm {\ cdot}} {{(m - i)}! ^ n}}} {{m}} \] bring into

则\[{\rm{\backslash begin\{ array\} \{ l\} n\backslash begin\{ array\} \{ *\{ 20\} \{ l\} \} }}f(n) = \sum\limits_{i = 0}^n {\sum\limits_{j = 0}^n {{\rm{S}}(i,j) \cdot {2^{\rm{j}}} \cdot j!}  = \sum\limits_{i = 0}^n {\sum\limits_{j = 0}^n {\sum\limits_{k = 0}^j {\frac{{{{( - 1)}^k}}}{{k!}} \cdot \frac{{{{(j - k)}^i}}}{{(j - k)!}}}  \cdot {{\rm{2}}^{\rm{j}}}{\rm{\cdotj}}!} } } {\rm{n\{ }} = \sum {\rm{\_}}j = {\rm{\^}}n{\rm{ \{ }}{2^j}{\rm{\cdotj}}!\sum {\rm{\_}}k = 0{\rm{\^}}j{\rm{ \{ }}\sum {\rm{\_}}i = 0{\rm{\^}}n{\rm{ \{ }}\frac{{{{( - 1)}^k}}}{{k!}} \cdot \frac{{{{(j - k)}^i}}}{{(j - k)!}} = \sum {\rm{\_}}j = {\rm{\^}}n{\rm{ \{ }}{2^j}{\rm{\cdot}}j!\sum {\rm{\_}}k = 0{\rm{\^}}j{\rm{ \{ \backslash frac\{ \{ \{ }}( - 1){\rm{\^\{ \^}}k{\rm{\} \} \} \} }}k! \cdot {\rm{\} }}\frac{{\sum\limits_{i = 0}^n {{{(j - k)}^i}} }}{{(j - k)!}}{\rm{\}  \}  \}  \}  \} n\backslash end\{ array\} \backslash \backslash  = }}\sum {\rm{\_}}j = {\rm{\^}}n{\rm{ \{ }}{2^j}{\rm{\cdot}}j!\sum {\rm{\_}}k = 0{\rm{\^}}j{\rm{ \{ \backslash frac\{ \{ \{ }}( - 1){\rm{\^\{ \^}}k{\rm{\} \} \} \} }}k! \cdot {\rm{\} }}\frac{{{{(j - k)}^{n + 1}} - 1}}{{(j - k)! \cdot (j - k - 1)}}{\rm{\} n\backslash end\{ array\} }}\]

令\[\begin{array}{l}
h(x) = \frac{{{{( - 1)}^x}}}{{x!}}\\
g(x) = \frac{{{x^{n + 1}} - 1}}{{x!{\rm{\cdot(x - 1)}}}}
\end{array}\]

Behind these two is the convolution of the line directly on ntt

#include<bits/stdc++.h>
#define ms(x) memset(x,0,sizeof(x))
#define sws ios::sync_with_stdio(false)
using namespace std;
typedef long long ll;
const int maxn=5e5+5;
const double pi=acos(-1.0);
const ll mod=998244353;///通常情况下的模数,
const ll g=3;///模数的原根998244353,1004535809,469762049
ll qpow(ll a,ll n,ll p){
    ll ans=1;
    while(n){
        if(n&1) ans=ans*a%p;
        n>>=1;
        a=a*a%p;
    }
    return ans;
}
int rev[maxn];
void ntt(ll a[],int n,int len,int pd){
    rev[0]=0;
    for(int i=1;i<n;i++){
        rev[i]=(rev[i>>1]>>1 | ((i&1)<<(len-1)));
         IF (I < Rev [I]) the swap (A [I], A [Rev [I]]); 
    } 
    for ( int MID = . 1 ; MID <n-; MID = << . 1 ) { 
        LL Wn of qpow = (G, (mod- . 1 ) / (MID * 2 ), MOD); /// primitive root root unit instead of 
        IF (PD == - . 1 ) = Wn of qpow (Wn of, mod- 2 , MOD); / // inverse transform into the inverse element 
        for ( int J = 0 ; J <n-; = J + 2 * MID) { 
            LL W = . 1 ;
             for ( int K = 0;k<mid;k++){
                ll x=a[j+k],y=w*a[j+k+mid]%mod;
                a[j+k]=(x+y)%mod;
                a[j+k+mid]=(x-y+mod)%mod;
                w=w*wn%mod;
            }
        }
    }
    if(pd==-1){
        ll inv=qpow(n,mod-2,mod);
        for(int i=0;i<n;i++){
            a[i]=a[i]*inv%mod;

        }
    }
}
ll a[maxn],b[maxn],c[maxn];
void solve(int n,int m){
    int len=0,up=1;
    while(up<=n+m) up<<=1,len++;
    ntt(a,up,len,1);
    ntt(b,up,len,1);
    for(int i=0;i<up;i++) c[i]=1ll*a[i]*b[i]%mod;
    ntt(c,up,len,-1);
}
ll fa[maxn];
int main(){
    int n,m;
    sws;
    cin>>n;
    fa[0]=1;
    a[0]=1;
    b[0]=1;
    for(int i=1;i<=n;i++){
        fa[i]=1ll*fa[i-1]*i%mod;
        int t=(i&1)==1?-1:1;
        a[i]=(t*qpow(fa[i],mod-2,mod)+mod)%mod;
        if(i==1) b[1]=n+1;
        else {
            b [i] = (qpow (i, n + 1 , v) - 1 + v)% v * qpow (1LL * (i- 1 ) * f [i]% v, MOD 2 , v)% v; 
        } 
    } 
    Solve (n, n); 
    II ans = 0 ;
    for (II i = 0 ; i <= n; i ++ ) { 
        ans = (ANS + qpow ( 2 , i, v) * f [i]% v * c [i]% v)% v; 
    } 
    Cout << ans << endl; 
}

 

Guess you like

Origin www.cnblogs.com/azznaz/p/11546388.html