Pagini recente » Cod sursa (job #1685161) | Cod sursa (job #40005) | Cod sursa (job #2216582) | Cod sursa (job #2487216) | Cod sursa (job #1226836)
#include <fstream>
#include <iostream>
#include <algorithm>
#define pe pair<int, int>
#define fi first
#define se second
#define mp make_pair
using namespace std;
ifstream fin("rsir.in");
ofstream fout("rsir.out");
const int MAX_M = 7010;
int ra[MAX_M];
int rb[MAX_M];
int M, z;
pe get(pe t) {
return mp(t.se, (ra[t.fi] + rb[t.se] + z) % M);
}
int main() {
int T0, T1, a, b, x, y;
long long n;
fin >> T0 >> T1 >> a >> b >> x >> y >> z >> M >> n;
T0 %= M;
T1 %= M;
if(n == 0) {
fout << T0;
return 0;
}
if(n == 1) {
fout << T1;
}
for(int i = 0; i <= M; i++) {
ra[i] = ((long long)a * i * i + x * i) % M;
rb[i] = ((long long) b * i * i + y * i) % M;
}
pe p1 = mp(T0, T1);
pe p2 = p1;
int c1 = 2, c2 = 3;
p1 = get(p1);
p2 = get(get(p2));
while(p1 != p2) {
p1 = get(p1);
c1++;
//cout << p1.se << ' ';
p2 = get(get(p2));
c2 += 2;
}
int l;
int t;
for(p2 = get(p2), l = 1; p2 != p1; p2 = get(p2), l++);
for(p2 = mp(T0, T1), t = 0; p1 != p2; p1 = get(p1), p2 = get(p2), t++);
if(n > t) {
n = (n - t) % l;
}
for(p1 = mp(T0, T1); n; p1 = get(p1), n--);
fout << p1.fi;
return 0;
}