二分之求Fibonacci

Fibonacci介绍


Fibonacci定义:

avatar

Fibonacci数列默认第一个数为0,第二个为1,其余后面的数为前两个之和,例如:
0,1,1,2,3,5,8,13,21......
普通计算第n个Fibonacci的方式是从第三位开始求前两位之和,直至第n位。这种计算方式的时间复杂度是O(n)。
下面用二分来计算Fibonacci


二分矩阵求Fibonacci

项目地址:github/DivideAndConquer/Fibonacci/
首先有下面的数学公式

avatar

也就是我们需要计算矩阵的n次方,这与利用分治计算幂是相同的道理,即
avatar

代码如下:

#include 
#include 

using namespace std;
#define MAX_SIZE 1000

//二维矩阵类
class Marix {
public:
    Marix(){};
    Marix(int x1,int x2,int y1,int y2){ value[0][0]=x1;value[0][1]=x2;value[1][0]=y1;value[1][1]=y2;};
    int value[2][2];
    bool isSetValue;
    void Show(){cout<0)
    {
        return powerMap[n].value[1][1];
    }
    SetPowerN(a,n);
    return powerMap[n].value[1][1];
}

int main() {
    Marix a(1,1,1,0);
    int n;
    cin>>n;
    InitMap(a);
    cout<

你可能感兴趣的:(二分之求Fibonacci)