POJ 3070 Fibonacci(矩阵快速幂)
来源:互联网 发布:网络实体小说排行榜 编辑:程序博客网 时间:2024/05/14 13:32
题目地址:http://poj.org/problem?id=3070
思路:矩阵快速幂和快速幂的思想差不多,快速幂详解地址:http://blog.csdn.net/qq_25605637/article/details/47357119,按照下面2张图来就行
AC代码:
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <queue>#include <stack>#include <map>#include <cstring>#include <climits>#include <cmath>#include <cctype>const int inf = 0x3f3f3f3f;//1061109567typedef long long ll;const int maxn = 40000;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;struct node{ int a[2][2]; void init() { a[0][0] = a[0][1] = a[1][0] = 1; a[1][1] = 0; }};node matrixmul(node a,node b){ node c; for(int i=0; i<2; i++) { for(int j=0; j<2; j++) { c.a[i][j] = 0; for(int k=0; k<2; k++) { c.a[i][j] += a.a[i][k] * b.a[k][j]; } c.a[i][j] %= 10000; } } return c;}node quickmod(node s,int k){ node ans; ans.init(); while(k) { if(k & 1) ans = matrixmul(ans,s); k = k >> 1; s = matrixmul(s,s); } return ans;}int main(){ int n; while(scanf("%d",&n)) { if(n == -1) break; if(n == 0) { printf("0\n"); continue; } node s; s.init(); s = quickmod(s,n-1); printf("%d\n",s.a[0][1]%10000); } return 0;}
大神地址:http://www.cnblogs.com/ACShiryu/archive/2011/08/09/poj3070.html
0 0
- poj - 3070 - Fibonacci(矩阵快速幂)
- poj 3070 Fibonacci(矩阵快速幂)
- poj 3070 Fibonacci(矩阵快速幂)
- POJ 3070 Fibonacci(矩阵快速幂)
- 【POJ】3070Fibonacci(矩阵快速幂)
- POJ 3070 Fibonacci(矩阵快速幂)
- POJ 3070 Fibonacci(矩阵快速幂)
- 【POJ 3070】Fibonacci(矩阵快速幂)
- POJ 3070 Fibonacci(矩阵快速幂)
- 【POJ 3070】Fibonacci(矩阵快速幂)
- POJ - 3070 - Fibonacci (矩阵快速幂)
- POJ-3070Fibonacci(矩阵快速幂)
- 【POJ】3070 - Fibonacci(矩阵快速幂)
- POJ 3070 Fibonacci(矩阵快速幂)
- Poj 3070 Fibonacci (矩阵快速幂)
- [POJ 3070] Fibonacci (矩阵快速幂)
- poj 3070 Fibonacci(矩阵快速幂)
- POJ 3070 Fibonacci(矩阵快速幂)
- Collection NSArrayM was mutated while being enumerated
- Nginx linux服务搭建
- 反转链表
- activiti简介
- 51nod 1118 机器人走方格(简单DP)
- POJ 3070 Fibonacci(矩阵快速幂)
- AR与VR初探
- c语言文件操作总结
- java中关于小数的四舍五入问题
- hdu1081 To The Max 「dp」
- 第9周项目1-深复制体验(2)
- Redis3.0 安装
- (JMETER 一)JMETER数据库测试
- Git常用命令