poj 3070 Fibonacci
来源:互联网 发布:ei数据库高级检索 编辑:程序博客网 时间:2024/06/05 07:18
题目链接:Fibonacci
题目大意:求斐波那契的第n项对10000求余
题目思路:构造矩阵后直接矩阵快速幂
#include <map>#include <set>#include <queue>#include <stack>#include <cmath>#include <vector>#include <cstdio>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const ll maxn = 3;const ll MOD = 10000;#define mod(x) ((x)%MOD)struct mat{ ll m[maxn][maxn];}unit;mat operator *(mat a,mat b){ mat ret; ll x; for(ll i = 0;i < maxn;i++){ for(ll j = 0;j < maxn;j++){ x = 0; for(ll k = 0;k < maxn;k++) x += mod((ll)a.m[i][k]*b.m[k][j]); ret.m[i][j] = mod(x); } } return ret;}void init_unit(){ for(ll i = 0;i < maxn;i++) unit.m[i][i] = 1; return ;}mat pow_mat(mat a,ll n){ mat ret = unit; while(n){ if(n&1) ret = ret*a; a = a*a; n >>= 1; } return ret;}int main(){ int n; init_unit(); while(~scanf("%d",&n)&&n!=-1){ if(n == 0) puts("0"); else if(n == 1) puts("1"); else if(n == 2) puts("1"); else{ mat a,b; b.m[0][0] = 1,b.m[0][1] = 1,b.m[0][2] = 0; b.m[1][0] = 1,b.m[1][1] = 0,b.m[1][2] = 1; b.m[2][0] = 0,b.m[2][1] = 0,b.m[2][2] = 0; a.m[0][0] = 1,a.m[0][1] = 1,a.m[0][2] = 0; b = pow_mat(b,n-2); a = a*b; printf("%lld\n",a.m[0][0]%MOD); } } return 0;}
阅读全文
0 0
- POJ 3070 Fibonacci
- POJ 3070 Fibonacci
- poj 3070 Fibonacci
- poj 3070 Fibonacci
- poj 3070 Fibonacci
- poj 3070 Fibonacci
- POJ 3070 Fibonacci
- poj 3070:Fibonacci
- POJ FIBONACCI (3070)
- POJ 3070 Fibonacci
- POJ 3070 Fibonacci (矩阵)
- POJ 3070 Fibonacci
- POJ 3070 Fibonacci
- poj-3070-Fibonacci
- poj 3070 Fibonacci
- POJ 3070 Fibonacci
- poj 3070 Fibonacci
- poj 3070 Fibonacci
- Android开发 之 WebView的版本变化
- 每天一个linux命令(43):killall命令
- tensorflow: name_scope 和 variable_scope的差别
- 虚函数和纯虚函数的区别
- Ros学习笔记(十):理解 launch文件
- poj 3070 Fibonacci
- 判断String是否为数值,包括小数和负数
- RTP 打包H.264
- ubuntu桌面程序启动器
- android studio 常用快捷键集锦
- git clone ssh地址时一直提示Permission denied, please try again
- Mysql 创建定时任务
- React系列-registerServiceWorker的作用
- MySQL中Cardinality值的介绍