斐波那契矩阵
2016-04-12 09:47
183 查看
#include<iostream> #include<math.h> #include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorithm> #define maxn 30 using namespace std; struct Matrax{ int m[maxn][maxn]; }; Matrax a,per; int M=10000,n=2; void init(){ for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ per.m[i][j]=(i==j); //单位矩阵,任何矩阵乘以单位矩阵其值不变 } } } Matrax multi(Matrax a,Matrax b){ //矩阵相乘: Matrax c; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ c.m[i][j]=0; for(int k=0;k<n;k++){ c.m[i][j]+=a.m[i][k]*b.m[k][j]; } c.m[i][j]%=M; } } return c; } //矩阵快速幂 思想等同于 整数快速幂 Matrax power(int k){ Matrax c,p,ans=per; p=a; while(k){ if(k&1){ ans=multi(ans,p); k--; }else{ k/=2; p=multi(p,p); } } return ans; } int main() { long long k; Matrax s,res; while(cin>>k){ if(k==-1) break; if(k==0) {cout<<0<<endl;continue;} a.m[0][0]=1;a.m[0][1]=1; a.m[1][0]=1;a.m[1][1]=0; init(); s=power(k); cout<<s.m[0][1]%M<<endl; } return 0; }
相关文章推荐
- 静态变量
- x264优化
- eclipse配置maven + 创建maven项目(一)
- JAVAThread 多线程学习
- 关于block的强弱引用问题
- linux 网络协议栈
- 排序算法复习
- ref与out的区别
- ViewConfiguration.getScaledTouchSlop () 用法
- com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1157 > 1024).
- ASP.NET 根据汉字获取汉字拼音的首字母(含多音字)
- 架构高性能网站秘笈(六)——负载均衡
- Git使用详细教程
- JavaWeb总结(五)—Cookie
- iOS开发--浅谈CocoaAsyncSocket编程
- LoganSquare的简单使用——快到爆炸地解析和序列化JSON
- 微信系统架构
- 编写自己的代码生成工具五:代码生成实现
- SHELL笔记之让文本飞(四)
- 5个最流行的可用于移动开发的嵌入式数据库简介