Pagini recente » Cod sursa (job #2404966) | Cod sursa (job #1900881) | Cod sursa (job #2736769) | Cod sursa (job #2287466) | Cod sursa (job #2236302)
#include <fstream>
using namespace std;
ifstream cin ("rsir.in");
ofstream cout ("rsir.out");
const int MMAX = 7e3;
typedef pair <int, int> pii;
int t0, t1, a, b, x, y, z, mod;
long long n;
int cnt1, cnt2;
pii p0, p1;
int v[2][1 + MMAX];
pii nxt(pii p) {
if(v[0][p.first] + v[1][p.second] >= mod)
return {p.second, v[0][p.first] + v[1][p.second] - mod};
return {p.second, v[0][p.first] + v[1][p.second]};
}
int sol(int ind) {
for(int i = 1; i <= ind; i++)
p0 = nxt(p0);
return p0.first;
}
int main() {
cin >> t0 >> t1 >> a >> b >> x >> y >> z >> mod >> n;
t0 %= mod;
t1 %= mod;
for(int i = 0; i < mod; i++) {
v[0][i] = ((1LL * (i * i % mod) * a) % mod + (1LL * x * i % mod) + z) % mod;
v[1][i] = ((1LL * (i * i % mod) * b) % mod + (1LL * y * i % mod)) % mod;
}
p0 = {t0, t1};
p0 = nxt(p0);
p1 = nxt(p0);
while(p0 != p1) {
p0 = nxt(p0);
p1 = nxt(nxt(p1));
}
p0 = {t0, t1};
while(p0 != p1) {
p0 = nxt(p0);
p1 = nxt(p1);
cnt1++;
}
p1 = nxt(p0);
cnt2 = 1;
while(p0 != p1) {
p1 = nxt(p1);
cnt2++;
}
p0 = {t1, t0};
if(n < cnt1)
cout << sol(n);
else
cout << sol(cnt1 + (n - cnt1) % cnt2);
return 0;
}