矩阵乘法

来源:互联网 发布:银天下交易软件 编辑:程序博客网 时间:2024/06/04 00:23

矩阵乘法

发布时间: 2017年8月31日 21:36   最后更新: 2017年9月3日 00:03   时间限制: 1000ms   内存限制: 127M

这是一道模板题。

分别给定 n×p 和p×m 的两个矩阵 A 和 B ,求A×B

第一行三个正整数 n 、p 、m,表示矩阵的长宽。
之后的 n 行,每行 p 个整数,表示矩阵A
之后的 p 行,每行 m 个整数,表示矩阵B

输出n 行,每行m 个整数,表示矩阵A×B,每个数模 109+7输出。

 复制
3 4 5-2 -8 -9 8-10 0 6 -8-10 -6 6 94 -7 5 -5 910 -2 -10 5 5-3 -7 -3 8 -2-6 7 7 3 -2
999999898 149 153 999999929 999999951999999997 999999979 999999883 74 999999921                                                                                                                                                   999999835 103 55 95 999999857
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int N = 500 + 10;const int N1 = 1000000000 + 7;long long e[N][N], e1[N][N], ans[N][N]; int main(){int n, m, p;while(scanf("%d%d%d", &n, &p, &m) != EOF){for(int i = 1; i <= n; i++){for(int j = 1; j <= p; j++){ans[i][j] = N1;}}memset(e, 0, sizeof(e));memset(e1, 0, sizeof(e1));for(int i = 1; i <= n; i++){for(int j = 1; j <= p; j++){scanf("%lld", &e[i][j]);e[i][j] %= N1;}}for(int i = 1; i <= p; i++){for(int j = 1; j <= m; j++){scanf("%lld", &e1[i][j]);e1[i][j] %= N1;}}long long t, t1;for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){t = N1;for(int k = 1; k <= p; k++){t1 = e[i][k] * e1[k][j];t += t1;//t = (t + e[i][k] * e1[k][j]);t %= N1;}ans[i][j] = t % N1;}}bool flag = true;for(int i = 1; i <= n; i++){flag = true;for(int j = 1; j <= m; j++){if(flag) flag = false;else printf(" ");if(ans[i][j] < 0) printf("%lld", (ans[i][j] + N1) % N1);else printf("%lld", ans[i][j] % N1);}printf("\n");}}return 0;} 

1n,p,m500109Ai,j,Bi,j109


AC代码:



原创粉丝点击