Pagini recente » Cod sursa (job #1766892) | Cod sursa (job #1436187) | Cod sursa (job #1487636) | Cod sursa (job #38704) | Cod sursa (job #1093585)
#include <cstdio>
#include <algorithm>
#define x first
#define y second
#define NMAX 7007
#define LL long long
using namespace std;
int a, b, x, y, z;
int M;
LL n;
int A[NMAX], B[NMAX];
pair< int, int > Next(pair< int, int > P){
int Sum = A[P.x] + B[P.y];
if(Sum >= M)
Sum -= M;
return make_pair(P.y, Sum);
}
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 %lld", &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;
}
P.x %= M;
P.y %= M;
for(int i = 0; i < M; ++i){
int k = (i * i) % M;
A[i] = (a * k + x * i) % M;
B[i] = (b * k + y * i + z) % M;
}
pair< int, int > T = P, R = P;
R = Next(Next(R));
T = Next(T);
while(R != T){
R = Next(Next(R));
T = Next(T);
}
pair< int, int > Cicle = T;
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;
}