/************************************************author:p owatrcreated time:2015-8-5 21:06:30File name:b.cpp /#include <cstdio> #include <algorithm> #include < iostream> #include <sstream> #include <cstring> #include <cmath> #include <string> #include <vector> #include <queue> #include <deque> #include <stack> #include <list> #include < map> #include <set> #include <bitset> #include <cstdlib> #include <ctime>using namespace std; #define Lson L, Mid, RT << 1#define Rson mid + 1, R, RT << 1 | 1typedef long ll;const int MAX = 50;int n;const int INF = 0x3f3f3f3f;const int mod = 1e9 + 7;struct matrix{int a[ Max][max]; void Inti () {memset (A, 0, sizeof (a)); for (int i = 0; i < n; i++) a[i][i] = 1; }}matrix; Matrix Mul (Matrix A, matrix B)//matrices multiplication {matrix ans; for (int i = 0; i < n; i++) for (int j = 0; J <n; J + +) {Ans.a[i][j] = 0; for (int k = 0; k < n; k++) ans.a[i][j] + = a.a[i][j] * B.a[k][j]; ANS.A[I][J]%= mod; } return ans; Matrix Add (matrix A, matrix B)//matrices addition {int I, j, K; Matrix ans; for (int i = 0, i < n; i++) for (int j = 0; J < N; j + +) {Ans.a[i][j] = A.a[i][j] + b.a[i][j]; ANS.A[I][J]%= mod; } return ans; Matrix Pow (matrix A, int n)//matrices fast power {matrix ans; Ans.inti (); while (n) {if (n&1) ans = mul (ans, a); N>>= 1; A = Mul (A, a); } return ans; Matrix sum (matrix A, int n)//matrix exponentiation and {int m; Matrix ans, pre; if (n = = 1) return A; m = n >> 1; Pre = SUM (A, m); Ans = Add (pre, Mul (pre, Pow (A, M))); if (n&1) ans = add (ans, pow (A, n)); return ans;} void output (Matrix a)//output {for (int i = 0, i < n; i++) for (int j = 0; J < N; j + +) printf ("%d %c ", A.a[i][j], J = = n-1? ' \ n ': ');} int main () {Matrix ans; scanf ("%d", &n); for (int i = 0; i < n; i++) for (int j = 0; J < N; j + +) {scanf ("%d%d", &matrix.a[i][j]); MATRIX.A[I][J]%= mod; } return 0;}
Template--Fast power of matrix