Pagini recente » Arhiva de probleme | Cod sursa (job #1328239) | Cod sursa (job #2005998) | Cod sursa (job #2058115) | Cod sursa (job #82751)
Cod sursa(job #82751)
using namespace std;
#include <stdio.h>
#define LL long long
LL N;
int t0, t1, a, b, x, y, z, M;
int tt0, tt1, tt2;
int tf0, tf1;
int mod[10000];
inline int get(int tt0, int tt1)
{
return (a * mod[tt0] + b * mod[tt1] + x * tt0 + y * tt1 + z) % M;
}
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;
int i;
for (i = 0; i < M; i++) mod[i] = (i * i) % M;
if (N == 0) {
printf("%d\n", t0);
return 0;
}
if (N == 1) {
printf("%d\n", t1);
return 0;
}
tt0 = t0;
tt1 = t1;
int lim = M * M + 1;
for (i = 2; i <= lim; i++) {
tt2 = get(tt0, tt1);
tt0 = tt1;
tt1 = tt2;
if (i == N) {
printf("%d\n", tt1);
return 0;
}
}
tf0 = tt0; tf1 = tt1;
tt0 = t0; tt1 = t1;
for (i = 2; i <= lim; i++) {
tt2 = get(tt0, tt1);
if (tt1 == tf0 && tt2 == tf1) break;
tt0 = tt1;
tt1 = tt2;
}
N -= i - 1;
N %= lim - i;
if (!N) {
printf("%d\n", tt1);
return 0;
}
tt0 = tt1; tt1 = tt2;
for (i = 2; i <= N; i++) {
tt2 = get(tt0, tt1);
tt0 = tt1;
tt1 = tt2;
}
printf("%d\n", tt1);
fclose(stdin);
fclose(stdout);
return 0;
}