Pagini recente » Cod sursa (job #2269817) | Cod sursa (job #2868280) | Cod sursa (job #1963488) | Cod sursa (job #1433353) | Cod sursa (job #735752)
Cod sursa(job #735752)
#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,new_val;
int A[maxdim],B[maxdim];
pair<int,int>x0;
inline void next( pair<int,int> &x ){
new_val = A[x.second] + B[x.first];
if ( new_val >= mod ) new_val -= mod;
x.second = x.first;
x.first = new_val;
}
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 = x0; next(p);
u = p; next(u);
while ( p != u ){
next(p);
next(u); next(u);
}
p = x0;
int coada = 0;
while ( p != u ){
++coada;
next(p);
next(u);
}
int lung = 1; u = p; next(u);
while ( p != u ){
++lung;
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 ){
next(sol);
}
fprintf(g,"%d\n",sol.first);
fclose(f);
fclose(g);
return 0;
}