hello, this is code to generate fibo numbers in log n time. it is giving o/p as "0", i dn't know where is error.
please help.
#include<stdio.h>
int (*(fibo)(int m[][2],int p))[2]
{
int r[2][2]={0,0,0,0},d[2][2]={0,0,0,0};
int (*l)[2];
int i,j,k;
if(p==1)
return m;
l=fibo(m,p/2);
for(i=0;i<2;i++)
for(j=0;j<2;j++)
{
r[i][j]=*((*l+i)+j);
}
for(i=0;i<2;i++)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
{
d[i][j]+=(r[i][k]*r[k][j]);
}
for(i=0;i<2;i++)
for(j=0;j<2;j++)
r[i][j]=d[i][j];
d[0][0]=d[0][1]=d[1][0]=d[1][1]=0;
if(p%2==0)
{
/*for(i=0;i<2;i++)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
r[i][j]+=m[i][k]+m[k][j];
*/
return fibo(r,p/2);
}
else
{
for(i=0;i<2;i++)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
{
d[i][j]+=(r[i][k]*m[k][j]);
}
for(i=0;i<2;i++)
for(j=0;j<2;j++)
r[i][j]=d[i][j];
return fibo(r,p/2);
}
}
int main()
{
int m[2][2]={
{1,1},
{1,0}
};
int i,j,k;
int f[2][2]={
{1,0},
{0,0}
};
int b[2][2]={0,0,0,0};
int (*g)[2]=fibo(m,10);
for(i=0;i<2;i++)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
{
b[i][j]+=f[i][k]*(*((*g+k)+j));
}
printf("%d\n",b[1][0]);
getch();
return 0;
}
any help is thankful.