利用矩阵的快速幂求斐波那契数列的代码实现
#include<stdio.h>
#include<string.h>
#define MOD 1000000007
struct juzhen
{
long long aa[2][2];
};
//矩阵的快速幂
juzhen chengfa(juzhen &a,juzhen &b)
{
juzhen c;
memset(c.aa,0,sizeof(c.aa));
for(int i = 0;i < 2;i++)
{
for(int j = 0;j < 2;j++)
{
for(int k = 0;k < 2;k++)
{
c.aa[i][j] = (c.aa[i][j] + a.aa[i][k] * b.aa[k][j]) % MOD;
}
}
}
return c;
}
juzhen pow(juzhen a,long long n)
{
juzhen ans;
for(int i = 0;i < 2;i++)
{
for(int j = 0;j < 2;j++)
{
if(i == j)
{
ans.aa[i][j] = 1;
}
else ans.aa[i][j] = 0;
}
}
while(n)
{
if(n & 1)
ans = chengfa(ans,a);
a = chengfa(a,a);
n /= 2;
}
return ans;
}
int main()
{
long long n;
juzhen a,b;
scanf("%I64d",&n);
a.aa[0][0] = a.aa[0][1] = a.aa[1][0] = 1;
a.aa[1][1] = 0;
b = pow(a,n);
printf("%I64d",b.aa[0][1] % MOD);
return 0;
}