Pagini recente » Cod sursa (job #2497905) | Cod sursa (job #2133699) | Cod sursa (job #1826601) | Rating Lisca Ana (aokirisaki) | Cod sursa (job #733669)
Cod sursa(job #733669)
#include<stdio.h>
#include<vector>
#define maxdim 7005
using namespace std;
FILE*f=fopen("rsir.in","r");
FILE*g=fopen("rsir.out","w");
int a,b,x,y,z,mod;
int A[maxdim],B[maxdim];
pair<int,int>x0,r;
inline pair<int,int> next( const pair<int,int> &x ){
r.second = x.first;
r.first = A[x.second] + B[x.first];
if ( r.first >= mod ) r.first -= mod;
return r;
}
int main () {
long long n;
fscanf(f,"%d %d %d %d %d %d %d %d",&x0.second,&x0.first,&a,&b,&x,&y,&z,&mod);
x0.second %= mod; x0.first %= mod;
fscanf(f,"%lld",&n);
for ( int i = 0 ; i < mod ; ++i ){
A[i] = (1LL*a*i*i + x*i + z) % mod;
B[i] = (1LL*b*i*i + y*i) % mod;
}
pair<int,int>p,u;
p = next(x0); u = next(p);
while ( p != u ){
p = next(p);
u = next(u); u = next(u);
}
p = x0;
int coada = 0;
while ( p != u ){
++coada;
p = next(p);
u = next(u);
}
int lung = 1; u = next(p);
while ( p != u ){
++lung;
u = next(u);
}
if ( n > coada + lung ){
n = coada + (n-coada)%lung; if (!((n-coada)%lung)) ++n;
}
pair<int,int>sol = x0;
for ( int i = 2 ; i <= n ; ++i ){
sol = next(sol);
}
fprintf(g,"%d\n",sol.first);
fclose(f);
fclose(g);
return 0;
}