| A+A^2+A^3+…Ak | |A A| (k-1)次方 | A |
| | = | | | |
| E | |0 E| | E |
A是输入的矩阵
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
#define N 66
int n, a[N][N], Mod;
//c = a*b
void Multi(int a[][N], int b[][N], int c[][N]) {
for (int i=0; i<n; i++)
for (int j=0; j<n; j++) {
c[i][j] = 0;
for (int k=0; k<n; k++)
c[i][j] = (c[i][j] + a[i][k]*b[k][j]) % Mod;
}
}
//d = s
void copy(int d[][N], int s[][N]) {
for (int i=0; i<n; i++) for (int j=0; j<n; j++)
d[i][j] = s[i][j];
}
//a = a^k % Mod
void PowerMod(int a[][N], int b) {
int t[N][N], ret[N][N];
for (int i=0; i<n; i++) ret[i][i] = 1;
while (b) {
if (b & 1) { Multi(ret, a, t); copy(ret, t); }
Multi(a, a, t); copy(a, t);
b >>= 1;
}
copy(a, ret);
}
void print(int x[][N], int y) {
for (int i=0; i<y; i++) {
printf("%d", x[i][0]);
for (int j=1; j<y; j++) printf(" %d", x[i][j]);
printf("\n");
}
}
int main() {
int k;
scanf("%d%d%d", &n, &k, &Mod);
memset(a, 0, sizeof(a));
for (int i=0; i<n; i++) for (int j=0; j<n; j++) scanf("%d", &a[i][j]);
if (k > 1) {
int m = n, b[N][N], c[N][N];
memset(b, 0, sizeof(b));
for (int i=0; i<n; i++) for (int j=0; j<n; j++) {
a[i][j+n] = a[i][j];
a[i+n][i+n] = 1;
b[i][j] = a[i][j];
b[i+n][i] = 1;
}
n = n*2;
PowerMod(a, k-1);
memset(c, 0, sizeof(c));
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
for (int k=0; k<n; k++)
c[i][j] = (c[i][j] + a[i][k]*b[k][j]) % Mod;
print(c, n/2);
} else print(a, n);
return 0;
}
分享到:
相关推荐
北大POJ2109-Power of Cryptography 解题报告+AC代码
北大POJ1459-Power Network 解题报告+AC代码
poj3233的代码,利用了面向对象的编程,是复习C++知识的好例子
北大POJ1001-Precision power 解题报告+AC代码
poj 1459 Power Network.md
POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类
poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题...
2遍dp poj_3613解题报告 poj_3613解题报告
poj acm题解,包括绝大部分poj题目的题解,可以供acm爱好者学习研究
poj分类poj分类poj分类poj分类
POJ第1861题源码 POJ第1861题源码 POJ第1861题源码
如题所示,亲测可用。求高精度幂,不会的同学可以参考下,会做的同学可以给挑挑毛病!大家以代码会友!
北大POJ1159-Palindrome 解题报告+AC代码
poj 3414解题报告poj 3414解题报告poj 3414解题报告poj 3414解题报告
poj 1012解题报告poj 1012解题报告poj 1012解题报告poj 1012解题报告
poj 2329解题报告poj 2329解题报告poj 2329解题报告poj 2329解题报告
poj 1659解题报告poj 1659解题报告poj 1659解题报告poj 1659解题报告
poj 百练 题目分类 poj 百练 题目分类
POJ1083的代码,POJ1083的代码,POJ1083的代码
C语言 poj npu 西工大 C语言Poj答案全完整打包,给有需要的朋友