Pagini recente » Cod sursa (job #2099440) | Cod sursa (job #580531) | Cod sursa (job #2807666) | Cod sursa (job #2801574) | Cod sursa (job #360548)
Cod sursa(job #360548)
#include <algorithm>
#include <stdio.h>
#define MAX 7010
#define ll long long
using namespace std;
int st1, st2, t0, t1, t, a, b, x, y, z, m;
ll n, lung;
int urm1[MAX], urm2[MAX];
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, &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("%d\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("%d\n", t0);
return 0;
}
for (t = urm1[t0] + urm2[t1] + z; t >= m; t -= m);
t0 = t1, t1 = t;
}
fclose(stdin);
fclose(stdout);
return 0;
}