矩阵乘法+快速幂求斐波那契

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m;
int a[2][2]={1,1,1,0};
int b[2][2]={1,0,0,1};
void jzcf(int a[2][2],int b[2][2])
{
    int i,j,k;
    int c[2][2];
    for(i=0;i<2;i++)
    {
        for(j=0;j<2;j++)
        {
            c[i][j]=0;
            for(k=0;k<2;k++)
            {
                c[i][j]=(c[i][j]+a[i][k]*b[k][j]);
            }
        }
    }
    for(i=0;i<2;i++)
    {
        for(j=0;j<2;j++)
        {
            b[i][j]=c[i][j];
        }
    }
}
void ksm(int n)
{
    if(n==0)
    {
        cout<<0<<endl;
    }
    else
    {
        n--;
        while(n)
        {
            if(n%2==1)
            {
                jzcf(a,b);
            }
            jzcf(a,a);
            n/=2;
        }
        cout<<b[0][0]<<endl;
    }
}
int main()
{

    while(cin>>n)
    {
        ksm(n);
        a[0][0]=a[0][1]=a[1][0]=b[0][0]=b[1][1]=1;
        a[1][1]=b[0][1]=b[1][0]=0;

    }
    return 0;
}

大神博客:

母函数http://blog.csdn.net/xuzengqiang/article/details/7464337

http://www.cnblogs.com/dongsheng/archive/2013/06/02/3114073.html

 原理:

f(n+1)    0                  1      1              f(n)         0           1         1             1            1            f(n-1)        0        1        1               f(1)    0

                          =                      *                           =                      *                          *                         =                  *   ' ' '*

f(n)        0                  1       0             f(n-1)      0           1         0             1            0            f(n-1)        0        1        0               f(0)     1

原文地址:https://www.cnblogs.com/beige1315402725/p/4921832.html