Witam wszystkich
Mój problem polega na mnożeniu macierzy rzadkich. Mam już kod który generuje taką macierz(najprostszą, macierz diagonalną).Dla tych którzy nie wiedzą o co chodzi, macierz rzadka to taka która ma bardzo mało elementów różnych od 0, macierz diagonalna to tak która ma na przekątnej coś różnego od 0).
W efekcie dostaje w plikach coś takiego:
0 0 7;
1 1 6;
2 2 9;
3 3 1;
4 4 4;
5 5 8;
6 6 5;
7 7 6;
8 8 4;
9 9 7;
10 10 6;

0 0 2;
1 1 1;
2 2 9;
3 3 8;
4 4 4;
5 5 5;
6 6 6;
7 7 6;
8 8 7;
9 9 8;
10 10 1;

1 cyfra to kolumna druga to wiersz i 3 to wartość
Jest to tylko cześć macierzy ponieważ każda składa się ze 100 000 elementów niezerowych.
Problem mój jest taki żeby to teraz pomnożyć i otrzymać wynik:)
Mój pomysł jest taki żeby wczytywać 100 elementów jednej macierzy i 100 elementów drugiej i mnożyć to przez siebie. Pytanie jak to napisać(trzeba tworzyć jakby własnych cache) i wszystko zapisać i do pliku. Kod którym do tej pory dysponuje to:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int row_numb = 100000; //rozmiar macierzy
int col_numb = 100000; //rozmiar macierzy
int coeff = 0.1; //wspolczynnik wypelnienia
int n = int(coeff * row_numb * col_numb); //liczba elementow niezerowych

//
void gen(char* fileName, int row_numb, int col_numb, int range) { //[0 do range) z ktorego losujemy wartosc elementow macierzy
FILE * pFile;
int i, j, w, k;

 pFile = fopen (fileName,"w+");
 if (pFile!=NULL) {
     srand(time(0));
     
     /*
     for(i=0; i<n; ++i) {
       w = rand()%MAX;
       k = rand()%MAX;
       
       fprintf(pFile, "%d %d %d;", w, k, rand()%range);
       tab[w][k] = rand();        
     }
     */
     
     for(i=0; i<row_numb && i<col_numb ; i++) {
        fprintf(pFile, "%d %d %d;\n", i, i, 1+rand()%range);                  
     }
    
    fclose (pFile);
 }

}

int main() {
char* matrixA = "m.txt";
char* matrixB = "m.txt";
gen(matrixA, row_numb, col_numb, 10); //tu generujemy macierz
gen(matrixB, row_numb, col_numb, 10); // tu generujemy transpozycje drugiej macierzy

FILE *pA, *pB;
pA = fopen (matrixA,"r+");
pB = fopen (matrixB,"r+");
if (pFile!=NULL) {


    
    fclose (pA);
    fclose (pB);
}  

return 0;

}

Mam nadzieje że mi pomożecie :)
pozdrawiam