Там же квадратные матрицы? откуда M и N? только N надо оставить и умножать его на себя.
Сдал у Ашота(iabb) этот код на 4. Он сказал, что можно было почти в каждом цикле сделать чистку, а у меня только одна (int in = i*N;).
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
using namespace std;
void genereeri(int* m, int NN)
{
for(int k = 0; k < NN; k++)
*(m+k) = (rand() % 201) - 100; // -100 .. 100
}
void mult(int* a, int* b, int* c, int N) {
for(int i=0;i<N;i++) {
int in = i*N;
for(int j=0;j<N;j++)
{
*(c+in+j) = 0;
for (int k=0;k<N;k++) {
*(c+in+j) += *(a+in+k) * *(b+k*N+j);
}
}
}
}
void print(int m[], int elemente, int veerge, string nimetus)
{
cout << "\n*** " << nimetus << " ***";
for(int i = 0; i < elemente; i++)
{
if(i % veerge == 0)
cout << endl;
cout << *(m+i) << '\t';
}
cout << endl;
}
int main()
{
//srand(1);
srand(time(NULL));
int N = 400;
cout << N << endl;
int a[N*N], b[N*N], c[N*N];
genereeri(a, N*N);
genereeri(b, N*N);
float algus = clock();
mult(a,b,c,N);
cout << float(clock() - algus) / CLOCKS_PER_SEC << " sekundit\n";
//print(a, N * N, N, "a");
//print(b, N * N, N, "b");
//print(c, N * N, N, "c");
return 0;
}