C
斐波那契进阶
时间限制:1000ms 内存限制:65536kb
通过率:56/60 (93.33%)
正确率:56/104 (53.85%)
解析:
快速幂求解斐波那契数列。附上两个链接:
代码:
#include<cstdio>
#define M 10007
struct Matrix{
long long v[3][3];
}mat;
Matrix mtMul(Matrix A, Matrix B)
{
Matrix C;
C.v[0][0]=(A.v[0][0]*B.v[0][0]+A.v[0][1]*B.v[1][0])%M;
C.v[0][1]=(A.v[0][0]*B.v[0][1]+A.v[0][1]*B.v[1][1])%M;
C.v[1][0]=(A.v[1][0]*B.v[0][0]+A.v[1][1]*B.v[1][0])%M;
C.v[1][1]=(A.v[1][0]*B.v[0][1]+A.v[1][1]*B.v[1][1])%M;
return C;
}
Matrix mtPow(Matrix A, int k)
{
if(k ==1)
return A;
A=mtPow(A,k/2);
if(k%2== 0)
{
return mtMul(A,A);
}
else{
return mtMul(mtMul(A, A), mat);
}
}
int main(){
int n;
mat.v[0][0]=1,mat.v[0][1]=1;
mat.v[1][0]=1,mat.v[1][1]=0;
while(scanf("%d",&n)!=EOF)
{
Matrix A = mtPow(mat,n);
printf("%d\n",A.v[0][1]);
}
return 0;
}