POJ 3070 Fibonacci 矩阵快速幂
2016-08-13 11:14
363 查看
题目链接:http://poj.org/problem?id=3070
用矩阵求斐波那契数列的第N项
第一次用矩阵快速幂
和乘法快速幂一样 看模板在纸上模拟一下过程就清楚了
矩阵快速幂不建议用递归写
代码:
用矩阵求斐波那契数列的第N项
第一次用矩阵快速幂
和乘法快速幂一样 看模板在纸上模拟一下过程就清楚了
矩阵快速幂不建议用递归写
代码:
#include <cstdio> #include <iostream> #include <cstring> #define sf scanf #define pf printf using namespace std; const int maxn = 10; struct Matrix{ int C[maxn][maxn]; int n; }; Matrix operator*(const Matrix& a,const Matrix& b){ Matrix ret; memset(ret.C,0,sizeof(ret.C)); ret.n = a.n; for(int i =1;i <= a.n;++i){ for(int j = 1;j <= a.n;++j){ for(int k = 1;k <= a.n;++k){ ret.C[i][j] += a.C[i][k] * b.C[k][j]; ret.C[i][j] %= 10000; } } } return ret; } Matrix operator^(Matrix a,int n){ Matrix ret; ret.n = a.n; for(int i = 0;i <= ret.n;++i){ for(int j = 0;j <= ret.n;++j){ ret.C[i][j] = (i == j); } } while(n){ if(n&1) ret = ret * a,n--; a = a * a; n >>= 1; } return ret; } int main(){ int n; while( sf("%d",&n) && ~n ){ Matrix ret; ret.n = 2; ret.C[1][1] = 1; ret.C[1][2] = 1; ret.C[2][1] = 1; ret.C[2][2] = 0; ret = ret ^ n; pf("%d\n",ret.C[1][2]); } return 0; }
相关文章推荐
- Fibonacci - POJ 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 (矩阵快速幂 Fibonacci数列新求法)
- POJ 3070 Fibonacci(矩阵快速幂)
- POJ 3070 Fibonacci(快速幂矩阵)
- poj 3070 Fibonacci (矩阵快速幂求斐波那契数列的第n项)
- POJ 3070 Fibonacci(矩阵快速幂)
- poj3070 Fibonacci ——矩阵快速幂
- poj3070 Fibonacci 矩阵快速幂
- poj 3070 Fibonacci(矩阵快速幂)
- poj 3070 Fibonacci (快速矩阵乘法)
- POJ 3070 Fibonacci 矩阵快速幂
- POJ 3070-Fibonacci(矩阵快速幂求斐波那契数列)
- poj 3070 Fibonacci(矩阵乘法快速幂)