【矩阵乘法】Fibonacci前n项和

本文介绍了一种高效的算法,用于求解斐波那契数列前n项和并取模m的问题。通过利用矩阵快速幂运算,结合斐波那契数列的性质,实现了对大规模数值的有效处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

大家都知道Fibonacci数列吧,f[1]=1,f[2]=1,f[3]=2,f[4]=3...也就是f[n]=f[n-1]+f[n-2]。现在,问题很简单,输入n和m,求前n项和取模m。

输入

输入n和m

1<=n<=2 000 000 000

1<=m<=1 000 000 010

输出

输出前n项和取模m。

样例输入

5 1000

样例输出

12

我发现了一个牛逼的结论,没有查百度哦!(骄傲

就是斐波那契前n项和Sn=f[n+2]-1

然后直接套了前一题的代码就过了。。

贴前一题的链接:https://blog.youkuaiyun.com/qq_44661312/article/details/98090360

然后上代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,m;
struct dd{
    ll sq[3][3];
};
//两个矩阵相乘
dd cheng(dd x,dd y)
{
    dd g;
    //因为矩阵规模较小我就直接写了
    g.sq[1][1]=((x.sq[1][1])%m*((y.sq[1][1])%m))%m+((x.sq[1][2])%m*((y.sq[2][1])%m))%m;
    g.sq[1][2]&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值