如题,code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int m,a,c,x0,g,n;
struct matrix{
int a[5][5];
};
int cheng(int a,int b){
int ret=0;
while(b){
if(b&1){
ret=(ret+a)%m;
}
a=(a+a)%m;
b>>=1;
}
return ret;
}
matrix operator*(matrix A,matrix B){
matrix C;
for(int i=1;i<=2;i++){
for(int j=1;j<=2;j++){
int cnt=0;
for(int k=1;k<=2;k++){
cnt=(cnt+cheng(A.a[i][k],B.a[k][j]))%m;
}
C.a[i][j]=cnt;
}
}
return C;
}
matrix qpow(matrix base,int up){
matrix ret;
memset(ret.a,0,sizeof ret.a);
for(int i=1;i<=2;i++){
ret.a[i][i]=1;
}
while(up){
if(up&1){
ret=ret*base;
}
base=base*base;
up>>=1;
}
return ret;
}
signed main(){
cin>>m>>a>>c>>x0>>n>>g;
a%=m,c%=m,x0%=m;
matrix A;
A.a[1][1]=a,A.a[1][2]=1,A.a[2][1]=0,A.a[2][2]=1;
matrix tmp=qpow(A,n);
cout<<((tmp.a[1][1]*x0+tmp.a[1][2]*c)%m)%g;
return 0;
}