美文网首页
用矩阵快速幂求fibroacci数列(作为做矩阵快速幂题的最基础

用矩阵快速幂求fibroacci数列(作为做矩阵快速幂题的最基础

作者: Anxdada | 来源:发表于2017-03-30 15:11 被阅读0次

这样才能使对矩阵快速幂有深入的理解!!!
(其余基础的不懂就请看我另一篇简书!!!)
代码如下:

#include<cstdio>
#include<cstring>
#include<iostream>
#define CLR(x) memset(x,0,sizeof(x));
using namespace std;

struct point
{
    int a[2][2]; //= {1,1,1,0};
    void cclear()
    {
        CLR(a);
    }
    point operator * ( const point &b) const {    //重载 * 号运算符.
        point tmp;
        tmp.cclear();
        for(int i=0;i<2;i++){
            for(int j=0;j<2;j++){
                for(int k=0;k<2;k++){
                    tmp.a[i][j] +=  (a[i][k] * b.a[k][j]);
                }
            }
        }
        return tmp;
    }
};

point x,res;    //res是单位矩阵,用来存结果,相当于数快速幂重中的 数字 1 .
void init()
{
    x.cclear();   //清空
    res.cclear();
    x.a[0][0] = 1;    //fibroacci数列矩阵形式,怎么推出来请在网上搜索.
    x.a[0][1] = 1;
    x.a[1][0] = 1;
    x.a[1][1] = 0;

    res.a[0][0] = 1;   //初始化为单位矩阵.
    res.a[0][1] = 0;
    res.a[1][0] = 0;
    res.a[1][1] = 1;

}
void qpow(int n)
{
    while(n){
        if(n&1) res = res * x;   // 不能写成res *= x ; 因为我们只是重载了,* 号运算符, 而没有重载 *= 运算符!
        x = x * x;
        n >>= 1;
    }
}
int main()
{
    int n;
    printf("你想知道fibonacci数列的第几项?\n");
    while(scanf("%d",&n)!=EOF){
        init();
        if(n < 3){
            printf("1\n");
            continue;
        }
        qpow(n-2);     //至于怎么推这个几次方,就是用等比数列来推!!!  an = a(n-1) * q ;
        printf("%d\n",res.a[0][0]*1+res.a[1][0]*1);
    }

}

相关文章

  • 用矩阵快速幂求fibroacci数列(作为做矩阵快速幂题的最基础

    这样才能使对矩阵快速幂有深入的理解!!!(其余基础的不懂就请看我另一篇简书!!!)代码如下:

  • (矩阵)快速幂

    快速乘法: 快速幂: 矩阵快速幂:

  • 2018-10-07-HDOJ-5950

    题目:HDOJ-5950一道矩阵快速幂经典题。

  • Codeforces Round #420 (Div. 2) E

    这个题很劲的,先贴代码,具体想法过程,一会再来写用矩阵快速幂去实现了一个寻找最优解的过程矩阵快速幂和dp的原理其实...

  • 斐波那契数列(Fibonacci)的几种实现

    斐波那契数列,定义: 递归求解 普通递归 尾递归 非递归递推解 利用矩阵计算 通过矩阵的快速幂实现 Matrix....

  • 快速幂,矩阵快速幂

    快速幂:复杂度为logn,比普通的n快了很多了. 原理 : 实现代码如下:(位运算,简单,简洁) 矩阵快速幂: 所...

  • 2018-07-09-快速幂

    参考:算法学习 - 快速幂和矩阵快速幂(复杂度Olog(n))C++实现 - CSDN博客

  • 快速幂

    常规求幂 快速求幂(一般) 快速求幂 (递归) 快速求幂(位运算) 快速求幂(位运算,更简洁)

  • 矩阵快速幂

    zoj 3497 Mistwald矩阵乘法,但是要先把点从二维变成一维,然后要特殊处理一下终点情况,走到终点就不...

  • 0216个人赛前三道题解

    A题 树的构造 B题 矩阵快速幂 C题 BFS A题 题意 给一个括号序列,对于不相交的每一对满足条件的子串,求能...

网友评论

      本文标题:用矩阵快速幂求fibroacci数列(作为做矩阵快速幂题的最基础

      本文链接:https://www.haomeiwen.com/subject/qttuottx.html