Pagini recente » Cod sursa (job #1328434) | Cod sursa (job #1960055) | Cod sursa (job #1839579) | Cod sursa (job #868478) | Cod sursa (job #2957944)
#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;
void advance(int &A, int &B){
int C = (a * A * A + b * B * B + x * A + y * B + z) % mod;
A = B;
B = C;
}
signed main(){
fin >> T0 >> T1;
fin >> a >> b >> x >> y >> z >> mod >> n;
T0 %= mod;
T1 %= mod;
int T2 = T0;
int T3 = T1;
advance(T2, T3);
advance(T2, T3);
int slow = 1;
int fast = 2;
int prevSlowVal = T1;
int slowVal = T2;
int prevFastVal = T2;
int fastVal = T3;
while(slowVal != fastVal && prevSlowVal != prevFastVal){
++slow;
advance(prevSlowVal, slowVal);
++fast;
++fast;
advance(prevFastVal, fastVal);
advance(prevFastVal, fastVal);
}
int cycLen = slow;
slow = 0;
prevSlowVal = T0;
slowVal = T1;
while(slowVal != fastVal && prevSlowVal != prevFastVal){
++slow;
advance(prevSlowVal, slowVal);
++fast;
advance(prevFastVal, fastVal);
}
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++){
advance(T0, T1);
}
fout << T1 << '\n';
}
if(cycLen < 10000){
return 69;
}
return 0;
}