AcWing1303. 斐波那契前 n 项和(递推/矩阵快速幂)
大家都知道 Fibonacci 数列吧,f1=1,f2=1,f3=2,f4=3,…,fn=fn−1+fn−2。
现在问题很简单,输入 n 和 m,求 fn 的前 n 项和 Snmodm。
输入格式
共一行,包含两个整数 n 和 m。
输出格式
输出前 n 项和 Snmodm 的值。
数据范围
1≤n≤2000000000,
1≤m≤1000000010
输入样例:
5 1000
输出样例:
12
矩阵快速幂板子题。设前n项和为,有,得到,显然转移矩阵为:
2 0 -1
1 0 0
0 1 0
搞一搞就行了
注意转移矩阵有减法,在进行矩阵乘法的时候注意多加几个mod防爆!!!
#include <bits/stdc++.h>
#define LL long long
using namespace std;
#define int long long
#define N 3
struct Mat
{
LL m[101][101];
void print() {
for(int i = 1; i <= N; i++) {
for(int j = 1; j <= N; j++) {
cout << m[i][j] << " ";
}
cout << endl;
}
}
};//存储结构体
Mat a,e; //a是输入的矩阵,e是输出的矩阵
Mat Mul(Mat x,Mat y, long long mod)
{
Mat c;
for(int i=1;i<=N;++i){
for(int j=1;j<=N;++j){
c.m[i][j] = 0;
}
}
for(int i=1;i<=N;++i){
for(int j=1;j<=N;++j){
for(int k=1;k<=N;++k){
c.m[i][j] = (c.m[i][j]%mod + x.m[i][k]%mod*y.m[k][j]%mod + mod + mod) % mod;//注意有减法!!得多加mod 要不然就爆了
}
}
}
return c;
}
Mat pow(Mat x,LL y, long long mod)//矩阵快速幂
{
for(int i = 1; i <= N; i++) {
for(int j = 1; j <= N; j++) {
e.m[i][j] = 0;
}
}
for(int i = 1; i <= N; i++) {
e.m[i][i] = 1;
}
Mat ans = e;
while(y){
if(y&1) ans = Mul(ans,x,mod);
x = Mul(x,x,mod);
y>>=1;
}
return ans;
}
long long n, m;
signed main() {
cin >> n >> m;
Mat base;
for(int i = 1; i <= 3; i++) {
for(int j = 1; j <= 3; j++) {
base.m[i][j] = 0;
}
}
base.m[1][1] = 2, base.m[1][3] = -1, base.m[2][1] = 1, base.m[3][2] = 1;
//base.print();
Mat S;
for(int i = 1; i <= 3; i++) {
for(int j = 1; j <= 3; j++) {
S.m[i][j] = 0;
}
}
S.m[1][1] = 4, S.m[2][1] = 2, S.m[3][1] = 1;
if(n == 1) cout << 1;
else if(n == 2) cout << 2;
else if(n == 3) cout << 4;
else {
Mat tmp = pow(base, n - 3, m);
Mat ans = Mul(tmp, S, m);
cout << ans.m[1][1];
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2020-07-10 洛谷P2872 [USACO07DEC]Building Roads S(最小生成树)
2020-07-10 卸载重装VirtualBox回滚报错
2020-07-10 POJ1151 Atlantis(扫描线+线段树+离散化)