Pagini recente » Cod sursa (job #1166417) | Cod sursa (job #2623190) | Cod sursa (job #737154) | Cod sursa (job #2635169) | Cod sursa (job #2834160)
#include <fstream>
using namespace std;
ifstream f("rsir.in");
ofstream g("rsir.out");
long long st0, st1, t0, t1, t2, a, b, x, y, z, m, n, ct0, ct1, ok, clen, poz, i;
long long et0[14100], et1[14100], sp, ep;
long long ap[7010], bp[7010], xp[7010], yp[7010];
int main()
{
f >> st0 >> st1 >> a >> b >> x >> y >> z >> m >> n;
st0 = st0 % m;
st1 = st1 % m;
t0 = st0;
t1 = st1;
for (i = 1; i <= m; i++)
{
ap[i] = a * i * i;
bp[i] = b * i * i;
xp[i] = x * i;
yp[i] = y * i;
}
if (m >= 100)
{
i = 2;
for (ep = m; ep < m * m + 3; ep += m) {
for (i = i; i < ep; i++) {
t2 = ap[t0] + bp[t1] + xp[t0] + yp[t1] + z;
t2 = t2 % m;
t0 = t1;
t1 = t2;
}
t2 = ap[t0] + bp[t1] + xp[t0] + yp[t1] + z;
t2 = t2 % m;
t0 = t1;
t1 = t2;
et0[i/m] = t0;
et1[i/m] = t1;
i++;
}
ep = m * m + 3;
for (i = i; i <= ep; i++)
{
t2 = ap[t0] + bp[t1] + xp[t0] + yp[t1] + z;
t2 = t2 % m;
t0 = t1;
t1 = t2;
}
}
else {
ep = m * m + 3;
for (i = i; i <= ep; i++)
{
t2 = ap[t0] + bp[t1] + xp[t0] + yp[t1] + z;
t2 = t2 % m;
t0 = t1;
t1 = t2;
}
}
ct0 = t0;
ct1 = t1;
for (i = m * m + 4; !ok; i++)
{
t2 = ap[t0] + bp[t1] + xp[t0] + yp[t1] + z;
t2 = t2 % m;
t0 = t1;
t1 = t2;
if (t0 == ct0 && t1 == ct1)
{
clen = i - (m * m + 3);
ok = 1;
}
if (m >= 100 && i % m == 0)
{
et0[i/m] = t0;
et1[i/m] = t1;
}
}
if (n == 0)
g << st0;
else if (n == 1)
g << st1;
else if (n <= m * m + 3)
{
if (m >= 100 && n >= m)
{
t0 = et0[n/m];
t1 = et1[n/m];
sp = (n / m) * m + 1;
}
else
{
t0 = st0;
t1 = st1;
sp = 2;
}
for (i = sp; i <= n; i++)
{
t2 = ap[t0] + bp[t1] + xp[t0] + yp[t1] + z;
t2 = t2 % m;
t0 = t1;
t1 = t2;
}
g << t1;
}
else
{
poz = (n - (m * m + 3)) % clen + (m * m + 3);
if (m >= 100)
{
t0 = et0[poz/m];
t1 = et1[poz/m];
sp = (poz / m) * m + 1;
}
else
{
t0 = ct0;
t1 = ct1;
sp = m * m + 4;
}
for (i = sp; i <= poz; i++)
{
t2 = ap[t0] + bp[t1] + xp[t0] + yp[t1] + z;
t2 = t2 % m;
t0 = t1;
t1 = t2;
}
g << t1;
}
f.close();
g.close();
return 0;
}