1. 程式人生 > >[Tjoi2016&Heoi2016]求和

[Tjoi2016&Heoi2016]求和

return name 遞推 esp else const names lin clu

Description

在2016年,佳媛姐姐剛剛學習了第二類斯特林數,非常開心。

現在他想計算這樣一個函數的值: 技術分享圖片 S(i, j)表示第二類斯特林數,遞推公式為: S(i, j) = j ∗ S(i − 1, j) + S(i − 1, j − 1), 1 <= j <= i − 1。 邊界條件為:S(i, i) = 1(0 <= i), S(i, 0) = 0(1 <= i) 你能幫幫他嗎?

Input

輸入只有一個正整數

Output

輸出f(n)。由於結果會很大,輸出f(n)對998244353(7 × 17 × 223 + 1)取模的結果即可。1 ≤ n ≤ 100000

Sample Input

3

Sample Output

87
明天再寫。。。。。
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 using namespace std;
 7 const int N=100000;
 8 int G=3,Mod=998244353;
 9 int a[8*N],fac[5*N],R[8*N],ifac[5
*N],inv[5*N],c[5*N],b[8*N],ans,n; 10 int qpow(int x,int y) 11 { 12 int res=1; 13 while (y) 14 { 15 if (y&1) res=1ll*res*x%Mod; 16 x=1ll*x*x%Mod; 17 y>>=1; 18 } 19 return res; 20 } 21 void NTT(int *A,int len,int o) 22 {int wn,w,i,j,k,x,y; 23 for
(i=0;i<len;i++) 24 if (i<R[i]) swap(A[i],A[R[i]]); 25 for (i=1;i<len;i<<=1) 26 { 27 wn=qpow(G,(Mod-1)/(i<<1)); 28 if (o==-1) wn=qpow(wn,Mod-2); 29 for (j=0;j<len;j+=(i<<1)) 30 { 31 w=1; 32 for (k=0;k<i;k++,w=1ll*w*wn%Mod) 33 { 34 x=A[j+k];y=1ll*w*A[j+k+i]%Mod; 35 A[j+k]=x+y; 36 if (A[j+k]>=Mod) A[j+k]-=Mod; 37 A[j+k+i]=x-y; 38 if (A[j+k+i]<0) A[j+k+i]+=Mod; 39 } 40 } 41 } 42 if (o==-1) 43 { 44 int tmp=qpow(len,Mod-2); 45 for (i=0;i<len;i++) 46 A[i]=1ll*A[i]*tmp%Mod; 47 } 48 } 49 int main() 50 {int i,len,lg; 51 cin>>n; 52 fac[0]=fac[1]=ifac[0]=ifac[1]=inv[1]=1; 53 for (i=2;i<=n;i++) 54 { 55 fac[i]=1ll*fac[i-1]*i%Mod; 56 inv[i]=1ll*(Mod-Mod/i)*inv[Mod%i]%Mod; 57 ifac[i]=1ll*ifac[i-1]*inv[i]%Mod; 58 } 59 for (i=0;i<=n;i++) 60 if (i%2==0) 61 a[i]=ifac[i]; 62 else a[i]=(Mod-ifac[i])%Mod; 63 b[0]=1;b[1]=n+1; 64 for (i=2;i<=n;i++) 65 b[i]=1ll*(qpow(i,n+1)-1)*inv[i-1]%Mod*ifac[i]%Mod,b[i]=(b[i]+Mod)%Mod; 66 len=1; 67 while (len<=2*n) len*=2,lg++; 68 for (i=0;i<len;i++) 69 R[i]=(R[i>>1]>>1)|((i&1)<<(lg-1)); 70 NTT(a,len,1);NTT(b,len,1); 71 for (i=0;i<len;i++) 72 a[i]=1ll*a[i]*b[i]%Mod; 73 NTT(a,len,-1); 74 for (i=0;i<=n;i++) 75 ans=1ll*(ans+1ll*qpow(2,i)*fac[i]%Mod*a[i]%Mod)%Mod; 76 cout<<ans; 77 }

[Tjoi2016&Heoi2016]求和