矩阵快速幂求斐波那契数列(初学整理)

对于矩阵乘法与递推式之间的关系:

 

如:在斐波那契数列之中

f[i] = 1*f[i-1]+1*f[i-2]  f[i-1] = 1*f[i-1] + 0*f[i-2];

所以

就这两幅图完美诠释了斐波那契数列如何用矩阵来实现。

优化的算法,将2*2矩阵的幂改为n,去掉后边的乘,直接输出矩阵中的a[0][1]位置的数就是下标与幂相等的斐波那契项数。

 

int pow(int n)//还是小范围数据来说吧,要不然返回值的类型自己定义  
{  
    mat c,res;  
    memset(res.a,0,sizeof(res.a));  
    c.a[0][0]=1;//给矩阵赋初值  
    c.a[0][1]=1;  
    c.a[1][0]=1;  
    c.a[1][1]=0;  
    for(int i=0;i>1;  
    }  
    return res.a[0][1];  
}//时间复杂度log(n)  
const int N=10;
int tmp[N][N];
void multi(int a[][N],int b[][N],int n)
{
    memset(tmp,0,sizeof tmp);
    for(int i=0;i>=1;
    }
}

 

 

 

 

你可能感兴趣的:(acm算法)