分析:这道题longlong类型整数相乘会溢出,用快速乘取模就好了,至于矩阵构造,利用递推式Xn+1=(aXn +c) mod m构造{{a,1},{0,1}}*{Xn,c}后,做坏左乘矩阵n次方后与右乘矩阵初始矩阵{X0,c}相乘即可
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=2;
ll A[N][N],B[N];
ll m;
ll quick_mul(ll x,ll y)
{
ll ans=0;
while(y){
if(y&1)ans=(ans+x)%m;
x=(x+x)%m;
y>>=1;
}
return ans;
}
void matrix1(ll a[][N],ll b[N])
{
ll t[N]={0};
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
t[i]+=quick_mul(a[i][j],b[j]);
t[i]%=m;
}
}
for(int i=0;i<N;i++)b[i]=t[i];
}
void matrix2(ll a[][N],ll b[][N])
{
ll t[N][N]={0};
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
for(int k=0;k<N;k++){
t[i][j]+=quick_mul(a[i][k],b[k][j]);
t[i][j]%=m;
}
}
}
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
a[i][j]=t[i][j];
}
}
}
void mat_pow(ll n)
{
while(n){
if(n&1)matrix1(A,B);
matrix2(A,A);
n>>=1;
}
}
int main()
{
ll a,c,x,n,g;
cin>>m>>a>>c>>x>>n>>g;
A[0][0]=a,A[0][1]=1,A[1][0]=0,A[1][1]=1;
B[0]=x,B[1]=c;
mat_pow(n);
cout<<B[0]%g<<endl;
return 0;
}