Pagini recente » Cod sursa (job #318123) | Cod sursa (job #579347) | Cod sursa (job #2917423) | Cod sursa (job #1712030) | Cod sursa (job #1236462)
#include<cstdio>
#include<algorithm>
using namespace std;
int St, Dr, T0, T1, A, B, X, Y, Z, M, aa[7009], bb[7009];
long long n;
pair < int, int > cur, cur1, cur2;
pair < int , int > Nxt (pair < int , int > ceva)
{
int pp, p, v;
pp = ceva.first;
p = ceva.second;
v = aa[pp] + bb[p];
if (v>=M) v-=M;
return make_pair(p, v);
}
int brut (long long n)
{
if (n==0) return T0;
if (n==1) return T1;
int p = 1;
cur = make_pair (T0, T1);
while (1)
{
cur = Nxt (cur);
p++;
if (p==n) return cur.second;
}
}
int main()
{
freopen ("rsir.in", "r", stdin);
freopen ("rsir.out", "w", stdout);
scanf ("%d %d %d %d %d %d %d %d %lld", &T0, &T1, &A, &B, &X, &Y, &Z, &M, &n);
T0%=M;
T1%=M;
for (int i=0; i<M; i++)
{
int j=(i*i)%M;
aa[i] = (j*A + X*i + Z)%M;
bb[i] = (j*B + Y*i)%M;
}
if (n <= M*M)
{
printf ("%d\n", brut(n));
return 0;
}
cur1 = make_pair(T0, T1);
cur2 = cur1;
St = 1;
while (1)
{
cur1 = Nxt ( cur1 );
St ++;
cur2 = Nxt ( cur2 );
cur2 = Nxt ( cur2 );
if (cur1 == cur2) break;
}
cur2 = Nxt(cur1);
Dr = St + 1;
while (1)
{
if (cur2 == cur1) break;
Dr ++;
cur2 = Nxt ( cur2 );
}
n = (n - St) % (Dr - St) + St;
printf ("%d\n", brut (n));
return 0;
}