斐波那契数列矩阵快速幂

来源:互联网 发布:flickr软件使用方法 编辑:程序博客网 时间:2024/05/21 06:36
#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;}


0 0
原创粉丝点击