Pagini recente » Cod sursa (job #1766140) | Cod sursa (job #2170275) | Cod sursa (job #3138786) | Cod sursa (job #1712373) | Cod sursa (job #2834135)
#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;
int main()
{
f >> st0 >> st1 >> a >> b >> x >> y >> z >> m >> n;
st0 = st0 % m;
st1 = st1 % m;
t0 = st0;
t1 = st1;
for (i = 2; i <= m * m + 3; i++) {
t2 = a * t0 * t0 + b * t1 * t1 + x * t0 + y * t1 + z;
t2 = t2 % m;
t0 = t1;
t1 = t2;
}
ct0 = t0;
ct1 = t1;
for (i = m * m + 4; !ok; i++) {
t2 = a * t0 * t0 + b * t1 * t1 + x * t0 + y * t1 + z;
t2 = t2 % m;
t0 = t1;
t1 = t2;
if (t0 == ct0 && t1 == ct1) {
clen = i - (m * m + 3);
ok = 1;
}
}
if (n == 0)
g << st0;
else if (n == 1)
g << st1;
else if (n <= m * m + 3) {
t0 = st0;
t1 = st1;
for (i = 2; i <= n; i++) {
t2 = a * t0 * t0 + b * t1 * t1 + x * t0 + y * t1 + z;
t2 = t2 % m;
t0 = t1;
t1 = t2;
}
g << t1;
}
else {
poz = (n - (m * m + 3)) % clen + (m * m + 3);
t0 = ct0;
t1 = ct1;
for (i = m * m + 4; i <= poz; i++) {
t2 = a * t0 * t0 + b * t1 * t1 + x * t0 + y * t1 + z;
t2 = t2 % m;
t0 = t1;
t1 = t2;
}
g << t1;
}
f.close();
g.close();
return 0;
}