#include<cstdio>
#include<cstring>
using namespace std;
const int init[2][2]={{0,1},{1,1}},mod=10007;
struct node{
int x[2][2];
node(){
memset(x,0,sizeof(x));
}
};
node ci(node a){
node turn;
int i,j,k;
for(i=0;i<2;i++){
for(j=0;j<2;j++){
for(k=0;k<2;k++){
turn.x[i][j]+=a.x[i][k]*a.x[k][j];
turn.x[i][j]%=mod;
}
}
}
return turn;
}
node cheng(node a){
node turn;
int i,j,k;
for(i=0;i<2;i++){
for(j=0;j<2;j++){
for(k=0;k<2;k++){
turn.x[i][j]+=a.x[i][k]*init[k][j];
turn.x[i][j]%=mod;
}
}
}
return turn;
}
node dfs(int n){
node a;
int i,j;
if(n==1){
int i,j;
for(i=0;i<2;i++){
for(j=0;j<2;j++){
a.x[i][j]=init[i][j];
}
}
return a;
}
else {
a=ci(dfs(n/2));
if(n%2){
a=cheng(a);
}
}
}
int main(){
int i,j,k,m,n;
while(scanf("%d",&n)){
node a=dfs(n);
printf("%d\n\n",a.x[1][0]);
}
return 0;
}
斐波那契数列矩阵快速幂
最新推荐文章于 2024-08-14 11:57:49 发布