Pagini recente » Cod sursa (job #2978318) | Cod sursa (job #1958015) | Cod sursa (job #144672) | Cod sursa (job #3213562) | Cod sursa (job #68671)
Cod sursa(job #68671)
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
using namespace std;
#define MP make_pair
int T0, T1, a, b, x, y, z, M, N, cnt, len;
pair<int, int> p1, p2;
pair<int, int> nxt(pair<int, int> T)
{
return MP(T.second, ((a * (T.first * T.first)%M)%M + (b * (T.second * T.second)%M)%M + (x * T.first)%M + (y * T.second)%M + z)%M);
}
int main(void)
{
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;
if (N == 0) { printf("%d\n", T0); return 0; }
if (N == 1) { printf("%d\n", T1); return 0; }
p1 = p2 = MP(T0, T1);
cnt = 1;
do
{
++ cnt;
p1 = nxt(p1), p2 = nxt(nxt(p2));
if (cnt == N) { printf("%d\n", p1.second); return 0; }
} while (p1 != p2);
len = 0;
do
{
++ len;
p1 = nxt(p1);
} while (p1 != p2);
(N -= cnt) %= len;
for (; N; N--)
p1 = nxt(p1);
printf("%d\n", p1.second);
return 0;
}