Pagini recente » Cod sursa (job #1645970) | Cod sursa (job #1377369) | Cod sursa (job #301265) | Monitorul de evaluare | Cod sursa (job #1679248)
#include<fstream>
using namespace std;
ifstream fin("rsir.in");
ofstream fout("rsir.out");
long long L, n, a, b, x, y, z, mod, L1, v1[7005], v2[7005];
pair<long long,long long> A, B;
pair<long long,long long> next( pair<long long,long long> nr ){
pair<long long,long long> next_nr;
next_nr.first = nr.second;
next_nr.second = v1[nr.first] + v2[nr.second];
if( next_nr.second >= mod ){
next_nr.second -= mod;
}
return next_nr;
}
int main(){
fin >> A.first >> A.second >> a >> b >> x >> y >> z >> mod >> n;
A.first %= mod;
A.second %= mod;
a %= mod;
b %= mod;
x %= mod;
y %= mod;
z %= mod;
for( int i = 0; i < mod; i++ ){
v1[i] = ( a * i * i + x * i + z ) % mod;
v2[i] = ( b * i * i + y * i ) % mod;
}
if( n == 0 ){
fout << A.first;
return 0;
}
if( n == 1 ){
fout << A.second;
return 0;
}
pair<long long,long long> save = A;
B = A;
do{
A = next( A );
B = next( next( B ) );
}while( A != B );
L = 0;
do{
L++;
B = next( B );
}while( A != B );
A = save;
B = save;
for( long long i = 1; i <= L; i++ ){
B = next(B);
}
L1 = 0;
while( A != B ){
A = next(A);
B = next(B);
L1++;
}
if( n < L1 ){
A = save;
for( long long i = 1; i <= n; i++ ){
A = next(A);
}
fout << A.first;
}else{
n = ( n - L1 ) % L;
for( long long i = 1; i <= n; i++ ){
A = next(A);
}
fout << A.first;
}
return 0;
}