I am trying to make the multiplication of matrices for Vinograd, but somehow it does not work out very well. I ask for your help. What is:
#include <iostream> #include <vector> int main() { const int n = 5; const int max = 10; const int min =1; int arr1[n][n]; int arr2[n][n]; int arr3[n][n]; std::vector <int> rowFactor; std::vector <int> columnFactor; int d = n/2; for(int i = 0; i < n; ++i) { for(int j = 0; j < n; ++j) { arr1[i][j] = rand()%(max-min+1) + min; arr2[i][j] = rand()%(max-min+1) + min; } } for(int i = 0 ;i<n;++i) { rowFactor.insert(rowFactor.end(), arr1[i][1]*arr1[i][2]); for(int j =0;j<d;++j) { rowFactor.insert(rowFactor.end(),rowFactor[i] + arr1[i][2*j - 1] * arr1[i][2*j]); } } for(int i = 0 ;i<n;++i) { columnFactor.insert(columnFactor.end(), arr2[i][1]*arr2[i][2]); for(int j =0;j<d;++j) { columnFactor.insert(columnFactor.end(), columnFactor[i] + arr2[2*j - 1][ i] * arr2[2*j][ i]); } } for(int i =0; i<n;++i) { for(int j =0;j<n;++j) { arr3[i][j] = -rowFactor[i] - columnFactor[j]; for(int k = 0; k< d;k++) { arr3[i][j]=arr3[i][j]+(arr1[i][ 2*k-1]+arr2[2*k][j])*(arr1[i][ 2*k] + arr2[2*k-1][j]); } } } std::cout<<"\nresult\n"<<std::endl; for (int i=0; i<n; i++) { for (int j=0; j<n; j++) std::cout << " " << arr3[i][j]; std::cout << std::endl; } } Even something counts, but not correctly. I think this line error
arr3[i][j]=arr3[i][j]+(arr1[i][ 2*k-1]+arr2[2*k][j])*(arr1[i][ 2*k] + arr2[2*k-1][j]);