Pagini recente » Cod sursa (job #2434262) | Cod sursa (job #225196) | Cod sursa (job #1304180) | Cod sursa (job #1528919) | Cod sursa (job #2957946)
#include <iostream>
#include <fstream>
#define int long long
using namespace std;
ifstream fin("rsir.in");
ofstream fout("rsir.out");
const int MODMAX = 7000;
int T0, T1;
int a, b, x, y, z, mod, n;
int advance(int A, int B){
return (a * A * A + b * B * B + x * A + y * B + z) % mod;
}
signed main(){
fin >> T0 >> T1;
fin >> a >> b >> x >> y >> z >> mod >> n;
T0 %= mod;
T1 %= mod;
int T2 = advance(T0, T1);
int T3 = advance(T1, T2);
int slow = 1;
int fast = 2;
int prevSlowVal = T1;
int slowVal = T2;
int prevFastVal = T2;
int fastVal = T3;
while(slowVal != fastVal && prevSlowVal != prevFastVal){
++slow;
int aux;
aux = advance(prevSlowVal, slowVal);
prevSlowVal = slowVal;
slowVal = aux;
++fast;
++fast;
aux = advance(prevFastVal, fastVal);
prevFastVal = fastVal;
fastVal = aux;
}
int cycLen = slow;
slow = 0;
prevSlowVal = T0;
slowVal = T1;
while(slowVal != fastVal && prevSlowVal != prevFastVal){
++slow;
int aux;
aux = advance(prevSlowVal, slowVal);
prevSlowVal = slowVal;
slowVal = aux;
++fast;
aux = advance(prevFastVal, fastVal);
prevFastVal = fastVal;
fastVal = aux;
}
int tailLen = slow;
n = (n + 1 - tailLen) % cycLen + tailLen - 1;
if(n == 0){
fout << T0 << '\n';
}else if(n == 1){
fout << T1 << '\n';
}else{
for(int i = 1; i < n; i++){
int aux = advance(T0, T1);
T0 = T1;
T1 = aux;
}
fout << T1 << '\n';
}
return 0;
}