2019牛客暑期多校5B:generator 1【广义斐波拉契数列循环节模板】

博客介绍了如何使用十进制矩阵快速幂方法解决广义斐波拉契数列的大型指数计算问题,详细阐述了数列的递推公式,并提供了相关代码实现。
摘要由CSDN通过智能技术生成

题目:

2019牛客暑期多校训练营5B:generator 1

题意:

Fn = aFn-1 + bFn-2 ,给出Fn数列的前两项F0和F1,求Fn【n大到要用字符串输入】

笔记:

(1)十进制矩阵快速幂

递推式直接给出了,但N大的我不敢写矩阵快速幂,赛后了解到十进制矩阵快速幂,原理和二进制一样:比如求矩阵A^123,等价于计算:A^100 * A^20 * A^3 = (A^100)^1 * (A^10)^2 * (A^1)^3,括号里的就和二进制每次平方是一样的道理

代码:

#include <bits/stdc++.h>
 
#define sz(x) (x).size()
using namespace std;
typedef long long ll;
struct matrix{
    ll m[2][2];
};
matrix I = {1,0,0,1};
ll x0,x1,a,b,mod;
string s;
inline matrix operator * (const matrix &A,const matrix &B){
    matrix res;
    res.m[0][0] = (A.m[0][0]*B.m[0][0]+A.m[0][1]*B.m[1][0])%mod;
    res.m[0][1] = (A.m[0][0]*B.m[0][1]+A.m[0][1]*B.m[1][1])%mod;
    res.m[1][0] = (A.m[1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值