POJ 3070 Fibonacci(矩阵快速幂)
2017-05-03 10:42
190 查看
本题是一道矩阵快速幂的入门题,提示里面已经给出了矩阵的构造,所以直接快速幂求解即可
#include <iostream> #include <algorithm> #include <cstdio> #include <cmath> #include <cstring> #include <cstdlib> #include <string> #include <vector> #include <stack> #include <set> #include <map> using namespace std; const int MAXN = 2; const int mod = 10000; struct Matrix { __int64 a[MAXN][MAXN]; int r;//行数 int c;//列数 }; void init(Matrix &mat, __int64 n) { for (int i = 0;i < mat.r;i++) { for (int j = 0;j < mat.c;j++) { mat.a[i][j] = n; } } } Matrix mul(Matrix mat1, Matrix mat2) { Matrix res; res.c = mat2.c; res.r = mat1.r; init(res, 0); for (int i = 0;i < mat1.r;i++) { for (int j = 0;j < mat2.c;j++) { for (int k = 0;k < mat1.c;k++) { res.a[i][j] += mat1.a[i][k] * mat2.a[k][j]; res.a[i][j] %= mod; } } } return res; } __int64 fmp(__int64 n) { Matrix ans; ans.c = 2; ans.r = 2; ans.a[0][0] = ans.a[0][1] = ans.a[1][0] = 1; ans.a[1][1] = 0; Matrix base = ans; while (n) { if (n & 1) ans = mul(ans, base); base = mul(base, base); n >>= 1; } return ans.a[1][1]; } int main() { __int64 n; while (cin >> n&&n!=-1) { cout << fmp(n) << endl; } 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(矩阵乘法快速幂)