Pagini recente » Cod sursa (job #401551) | Cod sursa (job #2264357) | Cod sursa (job #2188773) | Cod sursa (job #1919228) | Cod sursa (job #360520)
Cod sursa(job #360520)
#include <algorithm>
#include <stdio.h>
#define MAX 7010
using namespace std;
int a, b, x, y, z, m, n, stc, lung;
int urm1[MAX], urm2[MAX];
int aj[MAX][MAX];
int t[MAX * MAX];
int main()
{
freopen("rsir.in", "r", stdin);
freopen("rsir.out", "w", stdout);
scanf("%d %d %d %d %d %d %d %d %d", &t[1], &t[2], &a, &b, &x, &y, &z, &m, &n);
n++;
t[1] %= m;
t[2] %= m;
aj[t[0]][t[1]] = 1;
for (int i = 0; i < m; i++)
{
urm1[i] = (a * (i * i) + x * i) % m;
urm2[i] = (b * (i * i) + y * i) % m;
}
for (int i = 2; !stc; i++, stc = aj[t[i - 1]][t[i]], lung = i - stc)
{
aj[t[i - 1]][t[i]] = i;
t[i + 1] = urm1[t[i - 1]] + urm2[t[i]] + z;
if (t[i + 1] >= 2 * m)
t[i + 1] -= m;
if (t[i + 1] >= m)
t[i + 1] -= m;
}
if (n < stc)
printf("%d\n", t[n]);
else printf("%d\n", t[stc + (n - stc) % lung]);
fclose(stdin);
fclose(stdout);
return 0;
}