很简单的一道题啊qwq,构造矩阵然后乱搞搞就A了。(讲道理我一开始两个unsigned long long相乘写错了qwq,矩阵就是这样的:
|a 1| |Xn 0| |Xn+1 0|
|0 1| |c 0| |c 0|
#include"stdio.h"
#include"iostream"
using namespace std;
typedef unsigned long long ll;
ll mod,a,c,x0,n,Mod;
const ll maxint=1<<31;
inline ll mul(ll a,ll b){
ll c=0,aa=0,d=a; while(d) c=c*10+d%10,d/=10;
while(a) aa=(aa*10+(c%10*b))%mod,c/=10,a/=10;
return aa;
}
struct matrix{
ll m[2][2]; matrix(){}
matrix(ll c0,ll c1,ll c2,ll c3)
{ m[0][0]=c0,m[0][1]=c1,m[1][0]=c2,m[1][1]=c3;}
matrix friend operator *
(const matrix&a,const matrix&b){
matrix c
( (mul(a.m[0][0],b.m[0][0])+mul(a.m[0][1],b.m[1][0]))%mod,
(mul(a.m[0][0],b.m[0][1])+mul(a.m[0][1],b.m[1][1]))%mod,
(mul(a.m[1][0],b.m[0][0])+mul(a.m[1][1],b.m[1][0]))%mod,
(mul(a.m[1][0],b.m[0][1])+mul(a.m[1][1],b.m[1][1]))%mod );
return c;
}
};
int main(){
cin>>mod>>a>>c>>x0>>n>>Mod;
matrix k(1,0,0,1),ans(x0,0,c,0),po(a,1,0,1);
while (n){
if(n%2)k=k*po;
po=po*po; n>>=1;
}
ans=k*ans;
cout<<ans.m[0][0]%Mod<<endl;
return 0;
}