标签:
裸矩阵快速幂。
#include<cstdio>
#define N 100
const int p=30011;
int n,m;
typedef int ds[N][N];
ds f,q,a;
void mul(ds u,ds v){
for(int i=0;i!=n*2;++i)
for(int j=0;j!=n*2;++j)
a[i][j]=0;
for(int i=0;i!=n*2;++i)
for(int j=0;j!=n*2;++j)
for(int k=0;k!=n*2;++k)
a[i][j]=(a[i][j]
+u[i][k]*v[k][j])%p;
for(int i=0;i!=n*2;++i)
for(int j=0;j!=n*2;++j)
u[i][j]=a[i][j];
}
int main(){
scanf("%d%d",&n,&m);
if(!--m){
printf("%d\n",n==1);
return 0;
}
for(int i=0;i!=n;++i){
q[i+n][i+n]
=q[i][i]=1;
f[i+n][i]=1;
}
for(int i=n;i!=n*2;++i){
f[i-n][i]
=f[i][i]=1;
if(i-1>=n)
f[i-1][i]=1;
if(i+1<n*2)
f[i+1][i]=1;
}
for(;m;m>>=1){
if(m%2)mul(q,f);
if(m/2)mul(f,f);
}
printf("%d\n",(q[n]
[n-2]+q[n][n-1])%p);
}
标签:
原文地址:http://www.cnblogs.com/f321dd/p/5887073.html