Pagini recente » Cod sursa (job #1627544) | Cod sursa (job #388035) | Cod sursa (job #450867) | Cod sursa (job #1276729) | Cod sursa (job #456988)
Cod sursa(job #456988)
#include <iostream>
using namespace std;
#define maxm 7010
typedef pair<int, int> PII;
long long N;
int start, len;
int T0, T1, a, b, x, y, z, M;
int V1[maxm], V2[maxm];
inline PII next(PII a) {
int res = V1[a.first] + V2[a.second];
if(res >= M) res -= M;
return make_pair(a.second, res);
}
int main() {
FILE *f1=fopen("rsir.in", "r"), *f2=fopen("rsir.out", "w");
int i, j;
PII e1, e2;
fscanf(f1, "%d %d %d %d %d %d %d %d %lld\n", &T0, &T1, &a, &b, &x, &y, &z, &M, &N);
T0 %= M; T1 %= M; a %= M; b %= M; x %= M; y %= M; z %= M;
for(i=0; i<M; i++) {
V1[i] = ((i*i)%M * a + i*x) % M;
V2[i] = ((i*i)%M * b + y*i + z) % M;
}
e1 = make_pair(T0, T1);
e2 = next(e1);
while(e1 != e2) {
e1 = next(e1);
e2 = next(next(e2));
}
e2 = make_pair(T0, T1);
while(e2 != e1) {
e2 = next(e2);
start++;
}
e2 = next(e1); len = 1;
while(e2 != e1) {
e2 = next(e2);
len++;
}
if(N <= start) {
e2 = make_pair(T0, T1);
for(i=1; i<=N; i++) {
e2 = next(e2);
}
fprintf(f2, "%d\n", e2.first);
}
else {
N -= start; N %= len;
while(N) {
e1 = next(e1);
N--;
}
fprintf(f2, "%d\n", e1.first);
}
fclose(f1); fclose(f2);
return 0;
}