Mnzn求助矩阵快速幂WA20pts

P1349 广义斐波那契数列

@[lovely_hyzhuo](/user/716099) ~~太逊了~~我反正构造的原始矩阵是上下的,我也不知道你构造成 `b.v[1][1]=a2,b.v[1][2]=a1;` 咋做,我就是按徐老师上课讲的做的。最后答案是 `c.v[1][1]`。 ```cpp #include<bits/stdc++.h> using namespace std; #define int long long int p,q,a1,a2,a,mod; struct mat { int v[3][3]; mat() { memset(v,0,sizeof(v)); } }; mat operator*(mat A,mat B) { mat C; for(int i=1;i<=2;i++) for(int j=1;j<=2;j++) for(int k=1;k<=2;k++) C.v[i][j]=(C.v[i][j]+A.v[i][k]*B.v[k][j])%mod; return C; } mat qpow(mat A,int x) { mat base; for(int i=1;i<=2;i++) base.v[i][i]=1; while(x) { if(x&1)base=base*A; A=A*A; x>>=1; } return base; } signed main() { cin>>p>>q>>a1>>a2>>a>>mod; mat A,B; A.v[1][1]=p,A.v[1][2]=q; A.v[2][1]=1,A.v[2][2]=0; B.v[1][1]=a2,B.v[2][1]=a1; if(a==1)cout<<a1%mod; else if(a==2)cout<<a2%mod; else { mat C=qpow(A,a-2)*B; cout<<C.v[1][1]; } return 0; } ```
by Voluminousness @ 2023-11-12 22:35:21


[嗯](https://www.luogu.com.cn/discuss/739800)
by billtun @ 2023-12-01 20:02:22


|