Pagini recente » Cod sursa (job #2300181) | Cod sursa (job #3234428) | Cod sursa (job #1999970) | Cod sursa (job #1473003) | Cod sursa (job #1840741)
#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];
}
bool operator!=(stare s)
{
return !(*this == s);
}
};
void next(stare &s)
{
int aux = s.t[1];
s.t[1] = (e1[s.t[0]] + e2[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] = (a*i*i + x*i) % MOD;
e2[i] = ((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;
}