码迷,mamicode.com
首页 > 编程语言 > 详细

Fibonacci数列的快速幂算法

时间:2016-04-24 12:28:20      阅读:416      评论:0      收藏:0      [点我收藏+]

标签:

设Fibonacci数列定义为:

技术分享

请用矩阵快速幂方法,即利用以下公式求Fibonacci数列第n项。

技术分享

本题不涉及高精度数。

 1 #include<stdio.h>
 2 typedef struct matrix{
 3     int m[2][2];
 4 }matrix;
 5 
 6 matrix multi(matrix a, matrix b)
 7 {
 8     int i, j, k;
 9     matrix tmp;
10     for( i = 0; i < 2; ++i)
11     {
12         for( j = 0; j < 2; ++j)
13         {
14             tmp.m[i][j] = 0;
15             for( k = 0; k < 2; ++k)
16                 tmp.m[i][j] += a.m[i][k] * b.m[k][j];
17         }
18     }
19     return tmp;
20 }
21 int fast(int n)   // 求矩阵 base 的  n 次幂 
22 {
23     matrix ans, base;
24     base.m[0][0] = base.m[0][1] = base.m[1][0] = 1;
25     base.m[1][1] = 0;
26     ans.m[0][0] = ans.m[1][1] = 1;  // ans 初始化为单位矩阵 
27     ans.m[0][1] = ans.m[1][0] = 0;
28     while(n)
29     {
30         if(n & 1)    
31         {
32             ans = multi(ans, base);
33         }
34         base = multi(base, base);
35         n >>= 1;
36     }
37     return ans.m[0][1];
38 }
39 
40 int main()
41 {
42     int n;
43     while(scanf("%d", &n)!=EOF)
44     {   
45         printf("%d\n", fast(n));
46     }
47     return 0;
48 }

 

Fibonacci数列的快速幂算法

标签:

原文地址:http://www.cnblogs.com/jiasheng/p/5426641.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!