当前位置: 首页 > news >正文

斐波那契数列加强版 快速矩阵幂

题目描述
我们知道斐波那契数列的公式是:f ( n ) = f ( n − 1 ) + f ( n − 2 ) f(n) = f(n-1) + f(n-2)f(n)=f(n−1)+f(n−2)
其中f ( 1 ) = 1 f(1) = 1f(1)=1,f ( 2 ) = 1 f(2) = 1f(2)=1。

输入格式
输入一个正整数n nn( n ≤ 10 9 ) (n \le 10^9)(n≤10 
9
)。

输出格式
输出f ( n ) m o d    ( 10 9 + 7 ) f(n) \mod (10^9 + 7)f(n)mod(10 
9
+7)的值。

无法开1e9的一维数组!!使用矩阵幂进行计算。

代码:

#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
#include <cstring>
#define MX 10005
using namespace std;
typedef vector<long long> vec;
typedef vector<vec> mat; 
int n;
//用二维vector表示矩阵
const int mod = 1e9+7;
//计算矩阵A*矩阵B
mat mul(mat& a,mat& b)
{
mat c(a.size(),vec(b[0].size()));//矩阵a的行数,矩阵b的列数 
for(int i = 0;i < a.size();i++)
{
for(int k = 0;k < b.size();k++)
{
for(int j = 0;j < b[0].size();j++)
{
c[i][j] = (c[i][j] + a[i][k] * b[k][j]%mod)%mod;
}
}
}
return c;
}
//计算a*b
mat pow(mat a,long long b)
{
mat c(a.size(),vec(a.size()));
for(int i = 0;i < a.size();i++)
{
c[i][i] = 1;
}
while(b > 0)
{
if(b & 1) c = mul(c,a);
a = mul(a,a);
b = b>>1;

return c;

int main() {
cin>>n;
if(n == 0) cout<<0<<endl;
if(n == 1 || n == 2) cout<<1<<endl;
else{
mat a(2,vec(2));
a[0][0] = 1;
a[0][1] = 1;
a[1][0] = 1;
a[1][1] = 0;
mat res = pow(a,n-1);
cout<<res[0][0] % mod<<endl;
}
return 0;
}

http://www.lryc.cn/news/600768.html

相关文章:

  • 特产|基于SSM+vue的南阳特产销售平台(源码+数据库+文档)
  • Linux 系统调用详解:操作文件的常用系统调用
  • SSE (Server-Sent Events) 服务出现连接卡在 pending 状态的原因
  • 2025微前端架构研究与实践方案
  • JavaScript里的string
  • 前端设计中如何在鼠标悬浮时同步修改块内样式
  • 【机器学习深度学习】LLamaFactory微调效果与vllm部署效果不一致如何解决
  • k8s的nodeport和ingress
  • 什么是JUC
  • Voxtral Mini:语音转文本工具,支持超长音频,多国语音
  • 9.3 快速傅里叶变换
  • Docker常用命令详解:以Nginx为例
  • gig-gitignore工具实战开发(五):gig add完善
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 热词评论查询功能实现
  • Spring Boot 单元测试进阶:JUnit5 + Mock测试与切片测试实战及覆盖率报告生成
  • Android ADB命令之内存统计与分析
  • Java学习|黑马笔记|Day23】网络编程、反射、动态代理
  • 深入理解C语言快速排序与自省排序(Introsort)
  • 安卓服务与多线程
  • 学习嵌入式的第三十天-数据结构-(2025.7.21)网络编程
  • 系统性学习C语言-第二十三讲-文件操作
  • 台式电脑有多个风扇开机只有部分转动的原因
  • Matlab自学笔记六十五:解方程的数值解法(代码速成)
  • Nacos-服务注册,服务发现(二)
  • 八股文整理——计算机网络
  • 容器化成本优化:K8s资源请求与限制的黄金法则——从资源画像分析到25%成本削减的实战指南
  • 记录和分享抓取的数字货币和大A时序数据
  • 什么是ICMP报文?有什么用?
  • Matlab学习笔记:自定义函数
  • java基础(day16)set-map