首页 > 代码库 > POJ 3070 Fibonacci(矩阵快速幂)
POJ 3070 Fibonacci(矩阵快速幂)
题目链接
题意 : 用矩阵相乘求斐波那契数的后四位。
思路 :基本上纯矩阵快速幂。
1 //3070 2 #include <iostream> 3 #include <cstring> 4 #include <cstdio> 5 6 using namespace std; 7 8 struct Matrix 9 {10 int v[2][2];11 };12 int n;13 14 Matrix matrix_mul(Matrix a,Matrix b)15 {16 Matrix c;17 for(int i = 0 ; i < 2 ; i++)18 {19 for(int j = 0 ; j < 2 ; j++)20 {21 c.v[i][j] = 0 ;22 for(int k = 0 ; k < 2 ; k++)23 c.v[i][j]=(c.v[i][j]+a.v[i][k]*b.v[k][j])%10000;24 }25 }26 return c;27 }28 29 int matrix_mi()30 {31 Matrix p,t ;32 p.v[0][0] = p.v[0][1] = p.v[1][0] = 1 ;33 p.v[1][1] = 0;34 t.v[0][0] = t.v[1][1] = 1 ;//t是单位向量35 t.v[0][1] = t.v[1][0] = 0 ;36 while(n)37 {38 if(n&1)//奇数39 t = matrix_mul(t,p);40 n = n>>1 ;41 p = matrix_mul(p,p);42 }43 return t.v[1][0] ;44 }45 int main()46 {47 while(scanf("%d",&n)!=EOF&&n!=-1)48 {49 if(n == 0 || n == 1)50 {51 cout<<n<<endl;52 continue;53 }54 int ans = matrix_mi();55 cout<<ans<<endl;56 }57 return 0;58 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。