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