Matrix multiplication
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 3273 Accepted Submission(s): 1382
Problem Description
Given two matrices A and B of size n×n, find the product of them.
bobo hates big integers. So you are only asked to find the result modulo 3.
bobo hates big integers. So you are only asked to find the result modulo 3.
Input
The input consists of several tests. For each tests:
The first line contains n (1≤n≤800). Each of the following n lines contain n integers -- the description of the matrix A. The j-th integer in the i-th line equals A ij. The next n lines describe the matrix B in similar format (0≤A ij,B ij≤10 9).
The first line contains n (1≤n≤800). Each of the following n lines contain n integers -- the description of the matrix A. The j-th integer in the i-th line equals A ij. The next n lines describe the matrix B in similar format (0≤A ij,B ij≤10 9).
Output
For each tests:
Print n lines. Each of them contain n integers -- the matrix A×B in similar format.
Print n lines. Each of them contain n integers -- the matrix A×B in similar format.
Sample Input
1 0 1 2 0 1 2 3 4 5 6 7
Sample Output
0 0 1 2 1
Author
Xiaoxu Guo (ftiasch)
Source
Recommend
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define maxn 805
typedef long long ll;
int a[maxn][maxn];
int b[maxn][maxn];
int c[maxn][maxn];
int n;
int main()
{
while(~scanf("%d", &n)){
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++){
scanf("%lld", &a[i][j]);
a[i][j] %= 3;
}
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++){
scanf("%lld", &b[i][j]);
b[i][j] %= 3;
}
memset(c, 0, sizeof(c));
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
for(int k = 1; k <= n; k++) //注意内层循环顺序,利用cpu cache机制
c[i][k]=(c[i][k]+a[i][j]*b[j][k]);
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
printf("%d", c[i][j]%3);
if(j < n)
printf(" ");
else
printf("\n");
}
}
}
return 0;
}
本文介绍如何计算两个n×n矩阵的乘积,并在模3运算下给出结果。
1932

被折叠的 条评论
为什么被折叠?



