只 AC 了 #2,#3,不知道哪里错了。
#include<bits/stdc++.h>
using namespace std;
long long MOD;//模数
//矩阵
struct matrix{
long long a[110][110];
long long h,l;
void MatrixInit(){
memset(a,0,sizeof(a));
}
matrix operator *(const matrix &b) const{
//矩阵乘法
matrix res;
res.h = h;
res.l = b.l;
memset(res.a,0,sizeof(res.a));
for(long long i = 1; i <= res.h; i++){
for(long long j = 1; j <= res.l; j++){
for(long long k = 1; k <= l; k++){
res.a[i][j] += ((a[i][k]*b.a[k][j])%MOD);
res.a[i][j]%=MOD;
}
}
}
return res;
}
};
matrix MFP(matrix x,long long p){
if(p==1) return x;
matrix t = MFP(x,p>>1);
if(p&1) return t*t*x;
else return t*t;
}
matrix base;
int main(){
matrix star;
long long p,q,a1,a2,n,m;
scanf("%lld%lld%lld%lld%lld%lld",&p,&q,&a1,&a2,&n,&MOD);
//base
// |p,1|
// |q,0|
//star:|a_2,a_1|->|a_3,a_2|->...
base.MatrixInit();
base.h = 2;
base.l = 2;
base.a[1][1] = p;
base.a[2][1] = q;
base.a[1][2] = 1;
base.a[2][2] = 0;
star.h = 1;
star.l = 2;
star.a[1][1] = a2;
star.a[1][2] = a1;
if(n==1) printf("%lld",a1%MOD);//特判
else if(n==2) printf("%lld",a2%MOD);//特判
else {
matrix ret = MFP(base,n-2);
ret = ret*star;
printf("%lld",ret.a[1][1]%MOD);
}
return 0;
}