Pagini recente » Cod sursa (job #12884) | Rating Matei Alexandru (MateiAlexandru) | Cod sursa (job #104958) | Cod sursa (job #253896) | Cod sursa (job #360543)
Cod sursa(job #360543)
#include <algorithm>
#include <stdio.h>
#define MAX 7010
#define ll long long
using namespace std;
int st1, st2, t0, t1, t, lung, a, b, x, y, z, m, n;
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 %d", &t0, &t1, &a, &b, &x, &y, &z, &m, &n);
t0 %= m;
t1 %= m;
z %= m;
for (int i = 0; i < m; i++)
{
urm1[i] = ((ll) a * (i * i) + x * i) % m;
urm2[i] = ((ll) b * (i * i) + 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 -= 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;
for (st1 = t0, st2 = t1, i = 0; ; i++)
{
if (n % lung == i)
printf("%d", t0);
for (t = urm1[t0] + urm2[t1] + z; t >= m; t -= m);
t0 = t1, t1 = t;
}
fclose(stdin);
fclose(stdout);
return 0;
}