Pagini recente » Cod sursa (job #1998858) | Cod sursa (job #1265223) | Cod sursa (job #1860080) | Cod sursa (job #604019) | Cod sursa (job #1639418)
#include <algorithm>
#include <fstream>
#include <iostream>
using namespace std;
int a, b, x, y, z, t0, t1, MOD;
int mult_a[7005];
int mult_b[7005];
inline int f(int p, int q) {
int answer = mult_a[p] + mult_b[q];
if (answer >= MOD) {
answer -= MOD;
}
return answer;
}
pair<int, int> detect(int t0, int t1) {
int tortoise_t0, tortoise_t1, hare_t0, hare_t1;
tortoise_t0 = t1;
tortoise_t1 = f(t0, t1);
hare_t0 = tortoise_t1;
hare_t1 = f(tortoise_t0, tortoise_t1);
while (hare_t0 != tortoise_t0 || hare_t1 != tortoise_t1) {
int hare_t2 = f(hare_t0, hare_t1);
hare_t2 = f(hare_t1, hare_t2);
hare_t0 = f(hare_t0, hare_t1);
hare_t1 = hare_t2;
int tortoise_t2 = f(tortoise_t0, tortoise_t1);
tortoise_t0 = tortoise_t1; tortoise_t1 = tortoise_t2;
}
int length = 0;
tortoise_t0 = t0;
tortoise_t1 = t1;
while (tortoise_t0 != hare_t0 || tortoise_t1 != hare_t1) {
length += 1;
int tortoise_t2 = f(tortoise_t0, tortoise_t1);
tortoise_t0 = tortoise_t1; tortoise_t1 = tortoise_t2;
int hare_t2 = f(hare_t0, hare_t1);
hare_t0 = hare_t1; hare_t1 = hare_t2;
}
int cycle = 1;
hare_t0 = tortoise_t1; hare_t1 = f(tortoise_t0, tortoise_t1);
while (hare_t0 != tortoise_t0 || hare_t1 != tortoise_t1) {
int hare_t2 = f(hare_t0, hare_t1);
hare_t0 = hare_t1; hare_t1 = hare_t2;
cycle += 1;
}
return make_pair(length, cycle);
}
int main() {
ifstream fin("rsir.in");
ofstream fout("rsir.out");
long long n;
fin >> t0 >> t1 >> a >> b >> x >> y >> z >> MOD >> n;
for (int i = 0; i < MOD; ++ i) {
mult_a[i] = (1LL * i * i * a + 1LL * i * x + z) % MOD;
mult_b[i] = (1LL * i * i * b + 1LL * i * y) % MOD;
}
t0 = t0 % MOD; t1 = t1 % MOD;
pair<int, int> cycle = detect(t0, t1);
int t2;
for (int i = 1; i <= min(n, 1LL * cycle.first); ++ i) {
t2 = f(t0, t1);
t0 = t1; t1 = t2;
}
if (n <= cycle.first) {
fout << t0 << "\n";
}
n -= cycle.first;
n %= cycle.second;
for (int i = 1; i <= n; ++ i) {
t2 = f(t0, t1);
t0 = t1; t1 = t2;
}
fout << t0 << "\n";
return 0;
}