51nod 1242 斐波那契数列的第N项(矩阵幂运算)

来源:互联网 发布:eviews横截面数据步骤 编辑:程序博客网 时间:2024/05/20 15:58

1242 斐波那契数列的第N项
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
 收藏
 关注
斐波那契数列的定义如下:

F(0) = 0
F(1) = 1
F(n) = F(n - 1) + F(n - 2) (n >= 2)

(1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, ...)
给出n,求F(n),由于结果很大,输出F(n) % 1000000009的结果即可。
Input
输入1个数n(1 <= n <= 10^18)。
Output
输出F(n) % 1000000009的结果。
Input示例
11
Output示例
89

//矩阵幂运算 //注意是long long类型#include<stdio.h>#include<string.h>using namespace std;#define data 1000000009struct mat{long long a[2][2];};mat mat_return(mat x,mat y){mat res;memset(res.a ,0,sizeof(res.a));for(int i=0;i<2;i++)for(int j=0;j<2;j++)for(int k=0;k<2;k++){res.a[i][j]=(res.a[i][j]+x.a[i][k]*y.a[k][j]%data)%data;}return res;}int main(){long long n;while(~scanf("%lld",&n)){mat c,res;c.a[0][0]=c.a[0][1]=c.a[1][0]=1;//赋值 1,1,1,0; c.a[1][1]=0;memset(res.a,0,sizeof(res.a ));for(int i=0;i<2;i++)res.a[i][i]=1;//单位矩阵 ,都一样 while(n>0){//接下来就类似快速幂运算了 if(n&1)res=mat_return(res,c);c=mat_return(c,c);n/=2;}printf("%lld\n",res.a [0][1]); }return 0;}




阅读全文
0 0
原创粉丝点击