博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ3070-Fibonacci(矩阵快速幂)
阅读量:6406 次
发布时间:2019-06-23

本文共 1080 字,大约阅读时间需要 3 分钟。

解题思路:

这题的题述是求斐波那契数列的第n个数取模,同时在题干中附上了斐波那契数列的使用矩阵乘的求法。在花了两个小时看懂矩阵乘之后我感觉既然矩阵乘和普通乘法没有本质上的区别,那么应该可以将快速幂的方法应用到矩阵乘中。

AC代码:

#include 
#include
#include
#include
using namespace std;struct matrix{long long a[2][2];};matrix c;void mul(matrix a,matrix b){int i,j;for(i=0;i<2;i++) for(j=0;j<2;j++) c.a[i][j]=(a.a[i][0]*b.a[0][j]+a.a[i][1]*b.a[1][j])%10000;}int main(){ matrix ans,fib; long long n,i,j; while(scanf("%lld",&n)!=EOF&&n!=-1){ ans.a[0][0]=1; ans.a[0][1]=1; ans.a[1][0]=1; ans.a[1][1]=0; fib.a[0][0]=1; fib.a[0][1]=0; fib.a[1][0]=0; fib.a[1][1]=1; if(n==0) printf("0\n"); else{ n--; while(n>0){ if(n%2){ mul(ans,fib); fib.a[0][0]=c.a[0][0]; fib.a[0][1]=c.a[0][1]; fib.a[1][0]=c.a[1][0]; fib.a[1][1]=c.a[1][1]; } mul(ans,ans); ans.a[0][0]=c.a[0][0]; ans.a[0][1]=c.a[0][1]; ans.a[1][0]=c.a[1][0]; ans.a[1][1]=c.a[1][1]; n>>=1; } printf("%lld\n",fib.a[0][0]); } } return 0;}

转载地址:http://ryhea.baihongyu.com/

你可能感兴趣的文章
重构之美-跨越Web标准,触碰语义网[开门见山:Microformat]
查看>>
git入门与实践【转】
查看>>
WPF 虚拟键盘
查看>>
储存卡无法打开专家教您怎么数据恢复
查看>>
彼得原理
查看>>
如何利用【百度地图API】,制作房产酒店地图?(下)——结合自己的数据库...
查看>>
[20171113]修改表结构删除列相关问题3.txt
查看>>
特征选择
查看>>
在Winform程序中设置管理员权限及为用户组添加写入权限
查看>>
RTMP直播到FMS中的AAC音频直播
查看>>
多能互补提速 加快我国能源转型和现代能源体系建设
查看>>
B2G编译前的准备
查看>>
jQuery ajax()使用serialize()提交form数据
查看>>
程序框架的作用
查看>>
什么是DHTML
查看>>
Oxite学习之一:Oxite安装
查看>>
extjs4 panel下tools里的元素选择器
查看>>
Mac下使用Docker简单介绍
查看>>
SpringMvc Ehcache 实现缓存机制
查看>>
javascript闭包的使用
查看>>