社区讨论
所以怎么改初值?求救。。
P1962斐波那契数列参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mi6y7br7
- 此快照首次捕获于
- 2025/11/20 12:45 4 个月前
- 此快照最后确认于
- 2025/11/20 12:45 4 个月前
怎么把f[1]和f[2]的初值改掉
CPP#include<bits/stdc++.h>
#define ll long long
#define REP(i,a,b) for (int i(a);i<=(b);++i)
const int MOD=1e9+7;
using namespace std;
struct node{
long long m[3][3];
}amap,MO;
ll n;
node chen(node a,node b){
node c;
REP(i,1,2)REP(j,1,2){
c.m[i][j]=0; REP(z,1,2)
c.m[i][j]+=(a.m[i][z]%MOD)*(b.m[z][j]%MOD)%MOD;
c.m[i][j]%=MOD;
}
return c;
}
node work(ll x){
node ans=MO; x--;
while (x){
if (x%2==1) ans=chen(ans,MO);
MO=chen(MO,MO);
x/=2;
}
return ans;
}
int main(){
std::ios::sync_with_stdio(false);
cin>>n;
MO.m[1][2]=MO.m[2][1]=MO.m[2][2]=1; MO.m[1][1]=0;
if (n<=2) cout<<"1"<<endl;
else {
amap=work(n-2);
cout<<(amap.m[1][2]+amap.m[2][2])%MOD<<endl;
}
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...