题解 | 斐波那契数列

斐波那契数列

https://www.nowcoder.com/practice/c245af6cfdce49ceb5435f649ee14f89

#include <bits/stdc++.h>
#define  int long long
using namespace std;

const int MOD=1e9+7;

struct kkk
{
    int m[3][3];
};

kkk operator * (const kkk& a,const kkk& b)
{
    kkk c;
    for(int i=1;i<=2;i++)
    {
        for(int j=1;j<=2;j++)
        {
            c.m[i][j]=0;
        }
    }
    for(int i=1;i<=2;i++)
    {
        for(int j=1;j<=2;j++)
        {
            for(int p=1;p<=2;p++)
            {
                c.m[i][j]+=(a.m[i][p]*b.m[p][j])%MOD;
                c.m[i][j]%=MOD;
            }
        }
    }
    return c;
}

kkk qmi(kkk a,int b)
{
    kkk res;
    for(int i=1;i<=2;i++)
    {
        for(int j=1;j<=2;j++)
        {
            res.m[i][j]=0;
        }
    }
    for(int i=1;i<=2;i++)
    {
        res.m[i][i]=1;
    }
    while(b)
    {
        if(b&1)res=res*a;
        a=a*a;
        b>>=1;
    }
    return res;
}

signed main()
{
    int k;
    cin>>k;
    kkk x;
    x.m[1][1]=1;
    x.m[1][2]=1;
    x.m[2][1]=1;
    x.m[2][2]=0;
    kkk ans=qmi(x,k-1);
    cout<<ans.m[1][1]%MOD;
    return 0;
}

全部评论
矩阵快速幂
点赞 回复 分享
发布于 07-23 11:35 广东

相关推荐

赛博小保安:不行你就找点东西继续干干直接等明年走社招吧,学历差的在秋招真的没戏。
点赞 评论 收藏
分享
想玩飞盘的菠萝蜜在春...:上交✌🏻也拒?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务