poj3070 Fibonacci ——矩阵快速幂
2013-05-19 01:38
513 查看
题目链接:http://poj.org/problem?id=3070
题目大意:
求第N项的Fibonacci数的后四位。
题目思路:
根据公式:
用矩阵快速幂就OK,模板题……但还是TLE了一次,原因是题目要求输入-1结束,我没看到……o(╯□╰)o
其实就是完完全全的模板……
题目大意:
求第N项的Fibonacci数的后四位。
题目思路:
根据公式:
用矩阵快速幂就OK,模板题……但还是TLE了一次,原因是题目要求输入-1结束,我没看到……o(╯□╰)o
#include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <cmath> using namespace std; const int MAX = 2; const int M = 10000; typedef struct { int m[MAX][MAX]; }Matrix; Matrix a, per; int n; void init() { int i , j; for (i = 0; i < n; ++i) { for (j = 0; j < n; ++j) { per.m[i][j] = (i == j); } } a.m[0][0] = a.m[0][1] = a.m[1][0] = 1; a.m[1][1] = 0; } Matrix multi(Matrix a, Matrix b) { Matrix c; int k, i, j; for ( i = 0; i < n; ++i) { for (j = 0; j < n; ++j) { c.m[i][j] = 0; for (k = 0; k < n; ++k) { c.m[i][j] += a.m[i][k] * b.m[k][j]; } c.m[i][j] %= M; } } return c; } Matrix power(int k) { Matrix p, ans = per; p = a; while (k) { if (k & 1) { ans = multi(ans, p); k--; } else { k /= 2; p = multi(p, p); } } return ans; } int main(void) { Matrix ans; int k; n = 2; init(); while (~scanf("%d", &k)) { if (k == -1) break; init(); ans = power(k); printf("%d\n", ans.m[1][0]); } return 0; }
其实就是完完全全的模板……
相关文章推荐
- poj 3070 Fibonacci(矩阵乘法快速幂)
- poj 3070 Fibonacci(矩阵快速幂)
- POJ - 3070 - Fibonacci ( 矩阵快速幂 )
- (Relax 矩阵快速幂1.1)POJ 3070 Fibonacci(求第n个斐波那契数的后四位。n很大)
- POJ 3070 Fibonacci(矩阵快速幂)
- POJ 3070 Fibonacci (初学矩阵快速幂)
- POJ 3070 Fibonacci(矩阵快速幂)
- poj 3070 Fibonacci 矩阵快速幂
- poj3070 Fibonacci(矩阵快速幂)
- POJ 3070 Fibonacci.(矩阵快速幂)
- poj 3070 Fibonacci(矩阵快速幂)
- poj - 3070 - Fibonacci(矩阵快速幂)
- 【POJ】3070 - Fibonacci(矩阵快速幂)
- POJ 3070 Fibonacci 矩阵快速幂
- poj 3070 Fibonacci 矩阵快速幂
- POJ-3070 Fibonacci 快速矩阵幂
- hdu 3070 Fibonacci && poj 1575 Tr A(矩阵快速幂模板题)
- POJ 3070 Fibonacci (矩阵快速幂)
- 【POJ 3070】Fibonacci(矩阵快速幂)
- poj 3070 Fibonacci(矩阵快速幂模板,斐波那契)