Pagini recente » Istoria paginii runda/11dlabparcurgeri/clasament | Cod sursa (job #2436404) | Cod sursa (job #90437) | Cod sursa (job #3178588) | Cod sursa (job #1680388)
#include<fstream>
using namespace std;
ifstream fin("rsir.in");
ofstream fout("rsir.out");
int a, b, x, y, z, mod, v1[7005], v2[7005];
long long n, L ,L1;
pair<int,int> A, B;
pair<int,int> next( pair<int,int> nr ){
pair<int,int> 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] = ( 1LL * a * i * i + x * i + z ) % mod;
v2[i] = ( 1LL * b * i * i + y * i ) % mod;
}
if( n == 0 ){
fout << A.first;
return 0;
}
if( n == 1 ){
fout << A.second;
return 0;
}
pair<int,int> 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( int 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( int i = 1; i <= n; i++ ){
A = next(A);
}
fout << A.first;
}else{
n = ( n - L1 ) % L;
for( int i = 1; i <= n; i++ ){
A = next(A);
}
fout << A.first;
}
return 0;
}