基本运用,基本是模板题。
求fi【n】. (1,1) *( 1 )
( 1,0) ( 0)
#include<iostream> #include<cstring> using namespace std; struct juz { int bat[3][3]; int x,y; //行 列 }; juz mutp(juz a,juz b) { juz c; c.x=a.x;c.y=b.y; memset(c.bat,0,sizeof(c.bat)); for(int k=0;k<a.y;k++) for(int i=0;i<a.x;i++) if(a.bat[i][k]) { for(int j=0;j<b.y;j++) { c.bat[i][j]+=(a.bat[i][k]*b.bat[k][j])%10000; } } return c; } juz quickf(juz a,int k) { juz c=a; for(int i=0;i<a.x;i++) for(int j=0;j<a.x;j++) c.bat[i][j]=(i==j); while(k>=1) { if(k%2) c=mutp(c,a); k=k/2; a=mutp(a,a); } return c; } int main() { int n; while(cin>>n&&n!=-1) { if(n==0) { cout<<0<<endl;continue; } juz a,b,c; a.x=2;a.y=2; b.x=2;b.y=1; a.bat[0][0]=1;a.bat[0][1]=1;a.bat[1][0]=1;a.bat[1][1]=0; b.bat[0][0]=1;b.bat[1][0]=0; c=quickf(a,n-1); c=mutp(c,b); cout<<c.bat[0][0]<<endl; } return 0; }
时间: 2024-11-08 20:25:47