- generator 1
思路就是用十进制的快速幂就行了,在榜首找到大佬的矩阵快速幂板子,大佬的板子又短又强,感觉我以前的板子好笨重。新板子写来很简洁,一般不容易写错,存一波模板。
#include<bits/stdc++.h>
#define rep(i,n) for(int i=0;i<n;++i)
#define ll long long
using namespace std;
int mod;
const int N=2;
struct matrix{
int a[N][N];
friend matrix operator*(const matrix&a,const matrix&b)
{
matrix c;memset(c.a,0,sizeof(c.a));
rep(i,N)rep(k,N)rep(j,N)c.a[i][j]=(c.a[i][j]+1ll*a.a[i][k]*b.a[k][j])%mod;
return c;
}
void pre(){
memset(a,0,sizeof(a));
for(int i=0;i<N;i++)a[i][i]=1;
}
};
matrix fp(matrix x,int y){
matrix ret;
ret.pre();
while(y){
if(y&1)ret=ret*x;
x=x*x;
y/=2;
}
return ret;
}
char s[1000100];
int main(){
matrix rela,ret;
ios::sync_with_stdio(false);
int len,x0,x1,ax,bx;
cin>>x0>>x1>>rela.a[0][0]>>rela.a[0][1]>>s>>mod;
rela.a[1][0]=1,rela.a[1][1]=0;
len=strlen(s);
ret.pre();
for(int i=len-1;i>=0;i--){
ret=ret*fp(rela,s[i]-'0');
rela=fp(rela,10);
}
ll ans=(1ll*x1*ret.a[1][0]+1ll*x0*ret.a[1][1])%mod;
cout<<ans<<endl;
return 0;
}