pku 3233 Matrix Power Series

来源:互联网 发布:java ee javaweb 编辑:程序博客网 时间:2024/05/17 10:42
Description

Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak.

Input

The input contains exactly one test case. The first line of input contains three positive integers n (n ≤ 30), k (k ≤ 109) and m (m < 104). Then follow n lines each containing n nonnegative integers below 32,768, giving A’s elements in row-major order.

Output

Output the elements of S modulo m in the same way as A is given.

Sample Input

2 2 4
0 1
1 1

Sample Output

1 2
2 3
#include <stdio.h>struct Matrix {    int a[30][30];};Matrix E;int n, k, m;void InitE() {    for (int i = 0; i < 30; i++)        for (int j = 0; j < 30; j++)            E.a[i][j] = (i == j);}Matrix MatMul(Matrix A, Matrix B) {    Matrix C;    for (int i = 0; i < n; i++)        for (int k = 0; k < n; k++) {            C.a[i][k] = 0;            for (int j = 0; j < n; j++)                C.a[i][k] = (C.a[i][k] + (A.a[i][j] * B.a[j][k]) % m) % m;    }    return C;}Matrix MatPow(Matrix A, int n) {    Matrix C = E;    while (n > 0) {        if (n & 1)            C = MatMul(C, A);        A = MatMul(A, A);        n >>= 1;    }    return C;}Matrix MatPlus(Matrix A, Matrix B) {    for (int i = 0; i < n; i++)        for (int j = 0; j < n; j++)            A.a[i][j] = (A.a[i][j] + B.a[i][j]) % m;    return A;}Matrix Sum(Matrix A, int k) {    if (k == 1)        return A;    Matrix temp, B;    temp = Sum(A, k/2);    if (k & 1) {        B = MatPow(A, k / 2 + 1);        temp = MatPlus(temp, MatMul(temp, B));        temp = MatPlus(temp, B);    } else {        B = MatPow(A, k/2);        temp = MatPlus(temp, MatMul(temp, B));    }    return temp;}int main() {    scanf("%d%d%d", &n, &k, &m);    Matrix A, B;    for (int i = 0; i < n; i++)        for (int j = 0; j < n; j++)            scanf("%d", &A.a[i][j]);    InitE();    B = Sum(A, k);    for (int i = 0; i < n; i++) {        for (int j = 0; j < n; j++)            printf("%d ", B.a[i][j]);        printf("\n");    }    return 0;}


0 0
原创粉丝点击