Pagini recente » Cod sursa (job #371440) | Cod sursa (job #2236744) | Cod sursa (job #306093) | Cod sursa (job #1920046) | Cod sursa (job #1808313)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f ("rsir.in");
ofstream t ("rsir.out");
const int dim=2;
int mod;
struct matrix
{
int v[dim][dim];
matrix()
{
memset(v,0,sizeof(v));
}
void unit()
{
for(int i=0; i<dim; i++) v[i][i]=1;
}
matrix operator *(matrix a)
{
matrix rez;
for (int i=0; i<dim; ++i)
for (int j=0; j<dim; ++j)
for (int y=0; y<dim; ++y)
rez.v[i][j]=(rez.v[i][j]+1LL*v[i][y]*a.v[y][j])%mod;
return rez;
}
};
int main()
{
int a,b,x,y,z,t0,t1;
int64_t n;
f>>t0>>t1>>a>>b>>x>>y>>z>>mod>>n;
t0%=mod,t1%=mod;
if (n==0) t<<t0;
else if (n==1) t<<t1;
else {
matrix X,Y;
X.v[0][0]=t0,X.v[0][1]=t1;
Y.v[0][0]=0,Y.v[1][0]=1,Y.v[0][1]=(a*t0+x)%mod,Y.v[1][1]=(b*t1+y)%mod;
for (int i=1;i<n;++i){
X=X*Y;
X.v[0][1]=(X.v[0][1]+z)%mod;
t0=X.v[0][0];
t1=X.v[0][1];
Y.v[0][1]=(a*t0+x)%mod,Y.v[1][1]=(b*t1+y)%mod;}
cout<<X.v[0][1]%mod;}
return 0;
}