Cod sursa(job #2834132)

Utilizator Andrei_ierdnANeculau Rares-Andrei Andrei_ierdnA Data 16 ianuarie 2022 15:13:55
Problema Rsir Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.48 kb
#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 = st0;
        t1 = st1;
        for (i = 2; 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;
}