poj3070 Fibonacci 矩阵快速幂

来源:互联网 发布:中小学生网络作文大赛 编辑:程序博客网 时间:2024/04/29 10:48

嘿嘿,模版题目,但是我觉得我这个比较工整好看,毕竟我学快速幂的时候 是 参考着 被称为谷歌里写的最漂亮最好看最简洁的某篇文章,看着也确实很舒服,

计算公式 题目都给了,直接套模版


#include<iostream>#include<cstdio>#include<list>#include<algorithm>#include<cstring>#include<string>#include<queue>#include<stack>#include<map>#include<vector>#include<cmath>#include<memory.h>#include<set>#define ll long long#define LL __int64#define eps 1e-8//const ll INF=9999999999999;#define inf 0xfffffffusing namespace std;//vector<pair<int,int> > G;//typedef pair<int,int> P;//vector<pair<int,int>> ::iterator iter;////map<ll,int>mp;//map<ll,int>::iterator p;////vector<int>G[30012];typedef struct Node{int m[5][5];}Matrix;Matrix a,flg;Matrix multi(Matrix a,Matrix b)//矩阵乘法{Matrix c;for(int i=0;i<2;i++)for(int j=0;j<2;j++){c.m[i][j]=0;for(int k=0;k<2;k++)c.m[i][j]+=a.m[i][k]*b.m[k][j];c.m[i][j]%=10000;}return c;}Matrix quick(int k)//矩阵快速幂{Matrix p,ans=flg;p=a;while(k){if(k&1){ans=multi(ans,p);k--;}else{k/=2;p=multi(p,p);}}return ans;}int main(void){int n;a.m[0][0]=1;a.m[0][1]=1;a.m[1][0]=1;a.m[1][1]=0;flg.m[0][0]=1;flg.m[1][1]=1;flg.m[0][1]=0;flg.m[1][0]=0;while(cin>>n){if(n==-1)break;Matrix ans=quick(n);cout<<ans.m[0][1]<<endl;}}


原创粉丝点击