Files
cs420/bench/matrix.c
2025-06-13 15:44:37 +09:00

59 lines
1.2 KiB
C

int matrix_a[30][30];
int matrix_b[30][30];
int matrix_c[30][30];
void matrix_init(int n, int nonce, int* x, int (*matrix)[30]) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
matrix[i][j] = ++*x;
if (*x % (nonce + 1)) {
++*x;
}
}
}
}
int matrix_mul(int n, int nonce) {
if (!(n <= 30)) {
return nonce;
}
int x = 0;
matrix_init(n, nonce, &x, matrix_a);
matrix_init(n, nonce, &x, matrix_b);
int result = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
matrix_c[i][j] = 0;
for (int k = 0; k < n; ++k) {
matrix_c[i][j] += matrix_a[i][k] * matrix_b[k][j];
}
result ^= matrix_c[i][j];
}
}
return result;
}
int matrix_add(int n, int nonce) {
if (!(n <= 30)) {
return nonce;
}
int x = 0;
matrix_init(n, nonce, &x, matrix_a);
matrix_init(n, nonce, &x, matrix_b);
int result = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
matrix_c[i][j] = matrix_a[i][j] + nonce * matrix_b[i][j];
result ^= matrix_c[i][j];
}
}
return result;
}