Pagini recente » Cod sursa (job #195041) | Cod sursa (job #1779356) | Cod sursa (job #2948605) | Cod sursa (job #680036) | Cod sursa (job #736133)
Cod sursa(job #736133)
#include<fstream>
#define dim 7200
using namespace std;
ifstream f("rsir.in");
ofstream g("rsir.out");
typedef pair<int,int>cic;
int A[dim],B[dim];
int t0,t1,x,y,z,a,b,p1,p2,rr,inceput,i,lungime,n,M;
void precalcul () {
long mod=M;
for(int i=0;i<M;i++) {
A[i]=((((i*i)%mod)*a)%mod +(x*i)%mod)%mod;
B[i]=((((i*i)%mod)*b)%mod+(y*i)%mod)%mod;
}
}
inline cic next(cic w) {
int act = A[w.first] + B[w.second];
if(act >= M)
act -= M;
return make_pair(w.second,act);
}
int main () {
f>>t0>>t1>>a>>b>>x>>y>>z>>M>>n;
cic p1,p2,rr;
precalcul();
p1=make_pair(t0,t1);
p2=next(p1);
while (p1!=p2) {
p1=next(p1);
p2=next(next(p2));
}
inceput=0;
p2=make_pair(t0,t1);
while( p1!=p2 ) {
p2=next(p2);
inceput++;
}
lungime=0;
while( p1!=p2 ) {
p2=next(p2);
++lungime;
}
if(n==0){
g<<t0;
return 0;
}
if(n==1){
g<<t1;
return 0;
}
if(n<inceput) {
rr=make_pair(t0,t1);
for(i=2;i<=n;i++)
rr=next(rr);
g<<rr.second<<"\n";
return 0;
}
else{
n-=inceput;
n%=lungime;
for(;n;--n)
p1=next(p1);
g<<p1.second<<"\n";
return 0;
}
return 0;
}