暴力三个点的longlong 真是丧心!
以后要检查是不是相乘爆ll
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
long long ans[3];
long long tmp[3][3];
long long f[3][3];
long long x0,m,aa,bb,n,g;
long long kkk(long long a,long long b)
{
if(a<b) swap(a,b);
long long ans=0;
if(b==0) return 0;
while(b!=1)
{//cout<<b<<endl;
if(b&1) ans=(ans+a)%m;
a=(a+a)%m;
b>>=1;
}
return (ans+a)%m;
}
long long cal(long long a[][3],long long b[][3],long long c[][3])
{
long long x[3][3];
memset(x,0,sizeof(x));
for(long long i=1;i<=2;i++)
for(long long j=1;j<=2;j++)
for(long long k=1;k<=2;k++)
x[i][j]=(x[i][j]+kkk(a[i][k],b[k][j]))%m;
for(long long i=1;i<=2;i++)
for(long long j=1;j<=2;j++)
c[i][j]=x[i][j];
}
int main()
{
cin >> m >> aa >> bb >> x0 >>n >>g;
f[1][1]=aa%m;
f[2][1]=bb%m;
f[2][2]=1;
tmp[1][1]=1;
tmp[2][2]=1;
while(n!=1)
{
if(n&1) cal(tmp,f,tmp);
cal(f,f,f);
n>>=1;
}
cal(f,tmp,f);
x0%=m;
cout<<(kkk(f[1][1],x0)+f[2][1])%m%g;
return 0;
}