数学整合 新(LUOGU)

1.卡特兰数(P2532)

递推式:h(n)=C(2n,n)/(n+1) (n=0,1,2,...)

前十项(从零开始):1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862,

int n;
unsigned long long a[550<<1];

int main(){
    n=read();
    a[0]=1; a[1]=1;
    for(rint i=2;i<=n+n;i++) a[i]=1ull*a[i-1]*i;
    unsigned long long ans=a[n+n]/a[n]/a[n]/(n+1);
    cout<<ans<<endl;
    return 0;
}

 2.第二类斯特林数(P3904)

s(n,0)=0^n;  s(n,1)=s(n,n)=1;   s(n,m)=s(n-1,m-1)+m*s(n-1,m);

//不加高精
int
n,m; int f[51][51]; int main(){ n=read();m=read(); memset(f,0,sizeof(f)); for(rint i=1;i<=n;i++) f[i][1]=1; for(rint j=2;j<=m;j++) for(rint i=1;i<=n;i++) f[i][j]=f[i-1][j-1]+j*f[i-1][j]; cout<<f[n][m]; return 0; }
//使用高精
int
n,m; long long f[51][51][1010]={0}; inline void update(int u,int v){ for(rint i=1;i<=max(f[u-1][v-1][0],f[u-1][v][0]);i++) f[u][v][i]+=f[u-1][v-1][i]+f[u-1][v][i]*v; f[u][v][0]=max(f[u-1][v][0],f[u-1][v-1][0]); for(rint i=1;i<=f[u][v][0];i++) f[u][v][i+1]+=f[u][v][i]/10, f[u][v][i]=f[u][v][i]%10; while(f[u][v][f[u][v][0]+1]){ f[u][v][0]++; f[u][v][f[u][v][0]+1]+=f[u][v][f[u][v][0]]/10; f[u][v][f[u][v][0]]%=10; } } int main(){ n=read();m=read(); memset(f,0,sizeof(f)); f[1][1][0]=1;f[1][1][1]=1; for(rint i=2;i<=n;i++) for(rint j=1;j<=i;j++) update(i,j); if(f[n][m][0]==0){ printf("0 "); return 0; } for(rint i=f[n][m][0];i>=1;i--) cout<<f[n][m][i]; cout<<endl; return 0; }

3.斐波那契数列(P1962)

Fib[i]=Fib[i-1]+Fib[i-2](Fib[0]=1,Fib[1]=1);

//矩阵乘法
struct
matrix{ long long m[5][5];}a,b,ans; long long n; const int md=1e9+7; inline matrix mul(matrix a,matrix b){ matrix ans; for(rint i=1;i<=2;i++) for(rint j=1;j<=2;j++){ ans.m[i][j]=0; for(rint k=1;k<=2;k++) ans.m[i][j]=(ans.m[i][j]+a.m[i][k]*b.m[k][j])%md; } return ans; } inline matrix matpow(matrix a,long long b){ matrix ans=a;b--; while(b){ if(b&1) ans=mul(ans,a); a=mul(a,a); b>>=1; } return ans; } int main(){ cin>>n; if(n<=2){ printf("1 ");return 0;} a.m[1][1]=1;a.m[2][1]=1;a.m[1][2]=0;a.m[2][2]=0; b.m[1][1]=1;b.m[1][2]=1;b.m[2][1]=1;b.m[2][2]=0; b=matpow(b,n-1); ans=mul(a,b); cout<<ans.m[2][1]<<endl;//输出的是下面的f(n) 上面的是f(n+1) return 0; }
原文地址:https://www.cnblogs.com/Slager-Z/p/9901726.html