Pagini recente » Cod sursa (job #1656752) | Cod sursa (job #792614) | Cod sursa (job #2701730) | Cod sursa (job #498701) | Cod sursa (job #1093569)
#include <cstdio>
#include <algorithm>
#define x first
#define y second
using namespace std;
pair< int, int > Pointer1, Pointer2;
int a, b, x, y, z, M, n;
pair< int, int > Next(pair< int, int > P){ /// P = Pointer
return make_pair(P.y, (a % M * P.x % M * P.x % M + b % M * P.y % M * P.y % M + x % M * P.x % M + y % M * P.y % M + z % M) % M);
}
int main(){
pair< int, int > P;
freopen("rsir.in", "r", stdin);
freopen("rsir.out", "w", stdout);
scanf("%d %d %d %d %d %d %d %d %d", &P.x, &P.y, &a, &b, &x, &y, &z, &M, &n);
if(n == 0){
printf("%d\n", P.x);
return 0;
}
if(n == 1){
printf("%d\n", P.y);
return 0;
}
pair< int, int > T = P, R = P;/// T = turtle, R = rabbit
R = Next(Next(R));
T = Next(T);
while(R != T){
R = Next(Next(R));
T = Next(T);
}
pair< int, int > Cicle = T;/// Cicle face parte din ciclu
int Ciclu = 1;
R = Next(R);
while(T != R){
++ Ciclu;
R = Next(R);
}
while(n > 1 && T != Cicle)
T = Next(T);
if(n > 1)
n %= Ciclu;
while(n > 1){
-- n;
T = Next(T);
}
printf("%d", T.y);
return 0;
}