Pagini recente » Cod sursa (job #2065559) | Cod sursa (job #1752527) | Cod sursa (job #1862677) | Cod sursa (job #2607770) | Cod sursa (job #360550)
Cod sursa(job #360550)
#include <algorithm>
#include <stdio.h>
#define MAX 7010
#define ll long long
using namespace std;
ll st1, st2, t0, t1, t, a, b, x, y, z, m, n, lung;
ll urm1[MAX], urm2[MAX];
int main()
{
freopen("rsir.in", "r", stdin);
freopen("rsir.out", "w", stdout);
scanf("%lld %lld %lld %lld %lld %lld %lld %lld %lld", &t0, &t1, &a, &b, &x, &y, &z, &m, &n);
t0 %= m;
t1 %= m;
z %= m;
for (int i = 0; i < m; i++)
{
urm1[i] = (a * (i * i) % m + x * i) % m;
urm2[i] = (b * (i * i) % m + y * i) % m;
}
for (int i = 2; i < m * m; i++)
{
for (t = urm1[t0] + urm2[t1] + z; t >= m; t -= m);
t0 = t1, t1 = t;
if (i == n)
{
printf("%lld\n", t1);
return 0;
}
}
n -= (ll) m * m;
for (st1 = t0, st2 = t1, lung = 0; ; lung++)
{
for (t = urm1[t0] + urm2[t1] + z; t >= m; t -= m);
t0 = t1, t1 = t;
}/*
int i = 0;
for (st1 = t0, st2 = t1; ; i++)
{
if (n % lung == i)
{
printf("%lld\n", t0);
return 0;
}
for (t = urm1[t0] + urm2[t1] + z; t >= m; t -= m);
t0 = t1, t1 = t;
}*/
return 0;
}