Pagini recente » Cod sursa (job #556898) | Cod sursa (job #795356) | Cod sursa (job #526055) | Cod sursa (job #1852242) | Cod sursa (job #1840756)
#include <iostream>
#include <cstdio>
#define MAXMOD 7050
using namespace std;
int t0, t1, a, b, x, y, z, MOD;
int e1[MAXMOD], e2[MAXMOD];
long long n;
struct stare
{
int t[2];
stare(int v0 = 0, int v1 = 0)
{
t[0] = v0;
t[1] = v1;
}
bool operator!=(stare s)
{
return t[0] != s.t[0] || t[1] != s.t[1];
}
};
void next(stare &s)
{
int aux = s.t[1];
s.t[1] = (e1[s.t[0]] + e2[s.t[1]]);
if (s.t[1] >= MOD)
s.t[1] -= MOD;
s.t[0] = aux;
}
int main()
{
freopen("rsir.in", "r", stdin);
freopen("rsir.out", "w", stdout);
scanf("%d %d %d %d %d %d %d %d %lld", &t0, &t1, &a, &b, &x, &y, &z, &MOD, &n);
t0 %= MOD; t1 %= MOD; a %= MOD; b %= MOD; x %= MOD; y %= MOD; z %= MOD;
for (int i = 0; i <= MOD; i++) {
e1[i] = (1LL*a*i*i + x*i) % MOD;
e2[i] = (1LL*b*i*i + y*i + z) % MOD;
}
stare init(t0, t1), p1, p2;
p1 = p2 = init; next(p2);
long long ind = 1;
while (p1 != p2)
{
next(p1);
next(p2), next(p2);
ind++;
}
if (n == 0){
printf("%d", init.t[0]);
}
else if (n <= ind)
{
for (int i = 2; i <= n; i++)
next(init);
printf("%d", init.t[1]);
}
else
{
long long block = 0;
p1 = init; next(p2);
while (p1 != p2) {
next(p1);
next(p2);
block++;
}
n -= block;
n %= ind;
if (n == 0) n = ind;
for (int i = 2; i <= n; i++)
next(init);
printf("%d", init.t[1]);
}
return 0;
}