#include<stdio.h>
#define N 2
void matrix_multiply(int a[][N],int ia,int ja,int b[][N],int ib,int jb,int c[][N],int ic,int jc,int n)
{
if(n==1)
c[ic][jc]+=a[ia][ja]*b[ib][jb];
else
{
matrix_multiply(a,ia ,ja ,b,ib ,jb ,c,ic ,jc,n/2);
matrix_multiply(a,ia ,ja+n/2,b,ib+n/2,jb ,c,ic ,jc ,n/2);
matrix_multiply(a,ia ,ja ,b,ib ,jb+n/2,c,ic ,jc+n/2,n/2);
matrix_multiply(a,ia ,ja+n/2,b,ib+n/2,jb+n/2,c,jc ,jc+n/2,n/2);
matrix_multiply(a,ia+n/2,ja ,b,ib ,jb ,c,ic+n/2,jc ,n/2);
matrix_multiply(a,ia+n/2,ja+n/2,b,ib+n/2,jb ,c,ic+n/2,jc ,n/2);
matrix_multiply(a,ia+n/2,ja ,b,ib ,jb+n/2,c,ic+n/2,ic+n/2,n/2);
matrix_multiply(a,ia+n/2,ja+n/2,b,ib+n/2,jb+n/2,c,ic+n/2,jc+n/2,n/2);
}
}
int main()
{
int n=N;
int a[n][n];
int c[n][n];
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a[i][j]=i*n+j;
c[i][j]=0;
}
}
printf(“A:\n”);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf(“%d “,a[i][j]);
}
printf(“\n”);
}
matrix_multiply(a,0,0,a,0,0,c,0,0, n);
printf(“matrix_multiply:\n”);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf(“%d “,c[i][j]);
}
printf(“\n”);
}
}