您的位置:首页 > 其它

斐波那契数列的性质

2015-08-16 18:51 260 查看
斐波那契递推式:

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<string>
#include<algorithm>
#define LL long long
#define N 2
#define MOD 100000007
using namespace std;

struct Matrix
{
LL m

;
};

Matrix A = {
1,1,
1,0
};
Matrix I = {
1,0,
0,1
};
Matrix multi(Matrix a,Matrix b)
{
Matrix c;
int i,j,k;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
c.m[i][j] = 0;
for(k=0;k<N;k++)
{
c.m[i][j] += a.m[i][k] * b.m[k][j] % MOD;
}
c.m[i][j] %= MOD;
}
}
return c;
}
Matrix mat_pow(Matrix A,int k)
{
Matrix ans = I,p = A; //为了 不更改I 和 A
while(k)
{
if(k&1)
{
ans = multi(ans,p);
}
k >>= 1;
p = multi(p,p);
}
return ans;
}

int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
Matrix ans = mat_pow(A,n-1);
printf("%I64d\n",ans.m[0][0]);

}
return 0;
}


Matrix

[b]  
 
[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: