Rt,哪里挂了
#include <stdio.h>
#include <string.h>
long long mod,a,c,x0,n,g,N;
const int MAXN=2;
inline long long mul(long long x,long long y){
long long ans(0);
while(y){
if(y&1)
(ans+=x)%=mod;
(x<<=1)%=mod;
y>>=1;
}
return ans;
}
class Matrix{
public:
long long f[MAXN][MAXN];
Matrix(){
memset(f,0,sizeof f);
}
inline Matrix &operator*=(Matrix other){
int i,j,k;
Matrix mid;
for(i=0;i<MAXN;++i)
for(j=0;j<MAXN;++j)
for(k=0;k<MAXN;++k)
(mid.f[i][j]+=mul(f[i][k],other.f[k][j])%mod)%=mod;
return *this=mid;
}
}ans,base;
int main(){
scanf("%lld %lld %lld %lld %lld %lld",&mod,&a,&c,&x0,&n,&g);
ans.f[0][0]=x0;ans.f[1][0]=c;
base.f[0][0]=a;base.f[0][1]=1;
base.f[1][0]=0;base.f[1][1]=1;
N=n;
while(N){
if(N&1)
ans*=base;
base*=base;
N>>=1;
}
printf("%lld",ans.f[0][0]%g);
return 0;
}
/*
x[i]=a*x[i-1]+1*c
c =0*x[i-1]+1*c
[x] * [a,1]
[c] [0,1]
*/