AC日记——斐波那契数列 洛谷 P1962

Posted Only U - IU

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AC日记——斐波那契数列 洛谷 P1962相关的知识,希望对你有一定的参考价值。

斐波那契数列

 

思路:

  矩阵快速幂;

 

来,上代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

#define mod 1000000007

struct MatrixType {
    long long ai[3][3];
    
    void mem()
    {
        for(int i=0;i<3;i++)
        {
            for(int j=0;j<3;j++) ai[i][j]=0;
        }
    }
};

long long n;

MatrixType mul(MatrixType a,MatrixType b)
{
    MatrixType res;
    res.mem();
    for(int i=1;i<=2;i++)
    {
        for(int j=1;j<=2;j++)
        {
            for(int v=1;v<=2;v++) res.ai[i][j]=(res.ai[i][j]+(a.ai[i][v]*b.ai[v][j])%mod)%mod;
        }
    }
    return res;
}

long long poww(long long mi)
{
    MatrixType pos,mii;
    pos.mem(),mii.mem();
    pos.ai[1][1]=1,pos.ai[1][2]=0;
    pos.ai[2][1]=0,pos.ai[2][2]=0;
    mii.ai[1][1]=1,mii.ai[1][2]=1;
    mii.ai[2][1]=1,mii.ai[2][2]=0;
    while(mi>0)
    {
        if(mi&1) pos=mul(pos,mii);
        mi=mi>>1,mii=mul(mii,mii);
    }
    return pos.ai[1][1];
}

int main()
{
    scanf("%lld",&n);
    cout<<poww(--n)%mod;
    return 0;
}

 

以上是关于AC日记——斐波那契数列 洛谷 P1962的主要内容,如果未能解决你的问题,请参考以下文章

洛谷——P1962 斐波那契数列

洛谷P1962 斐波那契数列 || P1349 广义斐波那契数列[矩阵乘法]

[洛谷P1962]斐波那契数列

洛谷P1962 斐波那契数列

洛谷—— P1962 斐波那契数列

洛谷P1962 斐波那契数列