傻逼题,快速乘忘记取模TLE了一发。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long m,a,c,x0,n,g;
long long mul(long long a,long long b)
{
long long ans=0;
for (;b;b>>=1,(a<<=1)%=m)
if (b&1) (ans+=a)%=m;
return ans;
}
struct Matrix
{
long long a[2][2];
Matrix()
{
memset(a,0,sizeof(a));
}
friend Matrix operator*(Matrix a,Matrix b)
{
Matrix ans;
for (int i=0;i<2;i++)
for (int j=0;j<2;j++)
for (int k=0;k<2;k++)
(ans.a[i][j]+=mul(a.a[i][k],b.a[k][j]))%=m;
return ans;
}
friend Matrix operator^(Matrix a,long long b)
{
Matrix ans;
for (int i=0;i<2;i++) ans.a[i][i]=1;
for (;b;b>>=1,a=a*a)
if (b&1) ans=ans*a;
return ans;
}
}A;
int main()
{
scanf("%lld%lld%lld%lld%lld%lld",&m,&a,&c,&x0,&n,&g);
A.a[0][0]=a; A.a[0][1]=c; A.a[1][0]=0; A.a[1][1]=1;
A=A^n;
cout << (mul(A.a[0][0],x0)+A.a[0][1])%m%g << endl;
return 0;
}