uva 10655 Algebraic Problem(矩阵快速幂)
2013-09-10 16:33
351 查看
已知:
p = a + b;
q = a * b;
求:
a^n + b^n
构造矩阵:
X(n) = a^n + b^n;
……
X(0) = 2;
X(1) = a + b = p;
X(n) = (a + b) * X(n-1) - a * b * X(n-2);
| (a + b) - a * b | | X(n-1)| |X(n) |
| | * | | = | |
| 1 0 | | X(n-2)| |X(n-1)|
代码如下:
p = a + b;
q = a * b;
求:
a^n + b^n
构造矩阵:
X(n) = a^n + b^n;
……
X(0) = 2;
X(1) = a + b = p;
X(n) = (a + b) * X(n-1) - a * b * X(n-2);
| (a + b) - a * b | | X(n-1)| |X(n) |
| | * | | = | |
| 1 0 | | X(n-2)| |X(n-1)|
代码如下:
#include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <algorithm> using namespace std; #define ll unsigned long long typedef struct { ll m[2][2]; }Matrix; Matrix A, B, per; ll MOD; void init(ll p, ll q) { A.m[0][0] = p, A.m[1][0] = 2; B.m[0][0] = p, B.m[0][1] = q; B.m[1][0] = 1, B.m[1][1] = 0; per.m[0][0] = 1, per.m[0][1] = 0; per.m[1][0] = 0, per.m[1][1] = 1; } Matrix multi(Matrix a, Matrix b) { Matrix c; for(int i = 0; i < 2; i ++) { for(int j = 0; j < 2; j ++) { c.m[i][j] = 0; for(int k = 0; k < 2; k ++) { c.m[i][j] = c.m[i][j] + (a.m[i][k] * b.m[k][j]) ; } } } return c; } Matrix Power(int k) { Matrix ans = per, p = B; while(k) { if(k & 1) ans = multi(ans, p); k >>= 1; p = multi(p, p); } return ans; } ll GetAns(Matrix a, Matrix b) { ll ans = a.m[0][0] * b.m[0][0] + a.m[0][1] * b.m[1][0] ; return ans; } int main() { int t; ll p, q, n; scanf("%d", &t); for(int i = 1; i <= t; i ++) { scanf("%llu %llu %llu", &p, &q, &n); if(n == 0) { printf("Case %d: 2\n", i); continue; } init(p, -q); Matrix ans = Power(n-1); ll res = GetAns(ans, A); printf("Case %d: %llu\n", i, res); } return 0; }
相关文章推荐
- UVA 10655 - Contemplation! Algebra 矩阵快速幂
- UVa 10655 Contemplation! Algebra 矩阵快速幂
- UVa 10655 Contemplation! Algebra 矩阵快速幂
- Uva 10655 已知a+b,ab 求a^n+b^n 矩阵快速幂
- uva 10655 Contemplation! Algebra 矩阵快速幂
- UVA 10655 - Contemplation! Algebra(矩阵快速幂)
- uva 10655 - Contemplation! Algebra 【矩阵快速幂】【最坑的输入】
- UVA-10655 Contemplation! Algebra (矩阵快速幂)
- UVA 10655 Contemplation! Algebra(矩阵快速幂)
- UVa 10655 n次方之和(矩阵快速幂)
- Contemplation! Algebra UVA - 10655 (矩阵快速幂)
- uva 10655 Contemplation! Algebra(矩阵快速幂)
- uva 10655 - Contemplation! Algebra(矩阵快速幂)
- 【矩阵快速幂+输入终止条件判断】Contemplation! Algebra UVA - 10655
- uva 10655 Contemplation! Algebra(矩阵快速幂)
- Contemplation! Algebra UVA - 10655 矩阵快速幂
- UVA - 10655 (矩阵快速幂)
- uva 10689 - Yet another Number Sequence(矩阵快速幂)
- UVA 11149(B)——Power of Matrix (矩阵快速幂,倍增法)
- UVA 12297 Super Poker(矩阵快速幂)