Pagini recente » Cod sursa (job #2390652) | Cod sursa (job #2089100) | Cod sursa (job #2747061) | Cod sursa (job #951502) | Cod sursa (job #1644421)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rsir.in");
ofstream fout("rsir.out");
pair<int, int> rez[10010];
int main()
{
int t0, t1, a, b, x, y, z, m, ix, iy, i, iz, ix2, iy2, iz2, j;
long long n;
int cn = n;
fin >> t0 >> t1 >> a >> b >> x >> y >> z >> m >> n;
t0 %= m;
t1 %= m;
ix = t0;
ix2 = (ix * ix) % m;
iy = t1;
iy2 = (iy * iy) % m;
for(i = 2 , j = 2; ; i++, j++)
{
if(j == m)
{
j = 0;
rez[i / m] = make_pair(ix, iy);
}
// cout << ix << " " << iy << "\n";
iz = (a * ix2 + b * iy2 + x * ix + y * iy + z) % m;
iz2 = (iz * iz) % m;
ix = iy;
ix2 = iy2;
iy = iz;
iy2 = iz2;
if(ix == t0 && iy == t1)
break;
}
i--;
n %= i;
cn = (int)n;
if(cn == 0)
{
fout << t0 << "\n";
}
else if(cn == 1)
{
fout << t1 << '\n';
}
else
{
if(cn >= m)
{
ix = rez[cn / m].first;
iy = rez[cn / m].second;
}
else
{
ix = t0;
iy = t1;
}
ix2 = (ix * ix) % m;
iy2 = (iy * iy) % m;
for(i = (cn >= m) ? (cn - (cn % m)) : 2 ; i <= cn ; i++)
{
iz = (a * ix2 + b * iy2 + x * ix + y * iy + z) % m;
iz2 = (iz * iz) % m;
ix = iy;
ix2 = iy2;
iy = iz;
iy2 = iz2;
}
fout << iz << "\n";
}
}