标签:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int mod; int n; struct node{ int s[6][6]; }aa; void init(){ memset(aa.s,0,sizeof(aa.s)); aa.s[0][0]=aa.s[1][0]=aa.s[2][0]=aa.s[3][0]=1; aa.s[0][1]=1; aa.s[0][2]=aa.s[4][2]=1; aa.s[0][3]=2; aa.s[3][3]=1; aa.s[2][4]=1; } node mupi(node a,node b){ node c; memset(c.s,0,sizeof(c.s)); for(int k=0;k<5;k++){ for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ c.s[i][j]+=(a.s[i][k]%mod*b.s[k][j]%mod)%mod; } } } return c; } void slove(){ init(); node d; memset(d.s,0,sizeof(d.s)); for(int i=0;i<5;i++){ d.s[i][i]=1; } /* puts("d"); for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ printf("%d ",d.s[i][j]); } puts(""); } puts("aa:"); for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ printf("%d ",aa.s[i][j]); } puts(""); }*/ while(n){ if(n&1) d=mupi(aa,d); aa=mupi(aa,aa); n/=2; } /* for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ printf("%d ",d.s[i][j]); } puts(""); } */ int ans=0; printf("%d\n",d.s[0][0]%mod); } int main(){ while(scanf("%d%d",&n,&mod)&&n+mod){ slove(); } }
标签:
原文地址:http://blog.csdn.net/u013076044/article/details/45481753