Pagini recente » Cod sursa (job #2968061) | Cod sursa (job #858994) | Cod sursa (job #2674559) | Cod sursa (job #61587) | Cod sursa (job #1679508)
#include<cstdio>
struct pct{
int x;
int y;
}aa,bb,cc;
long long n;
int a,b,c,d,e,m,t1,t2,i,j,n1,n2,v[7010],x[7010];
FILE *f,*g;
void upd( pct &a ){
pct r;
r = a;
int aux = r.y;
r.y = r.x;
r.x = v[ a.x ] + x[aux] ;
if( r.x > m )
r.x -= m;
a = r;
}
int main(){
f=fopen("rsir.in","r");
g=fopen("rsir.out","w");
fscanf(f,"%d%d%d%d%d%d%d%d%lld",&t1,&t2,&a,&b,&c,&d,&e,&m,&n);
t1 %= m;
t2 %= m;
a %= m;
b %= m;
c %= m;
d %= m;
e %= m;
aa.x = bb.x = t2;
aa.y = bb.y = t1;
for(i=0;i<=m;i++){
v[i] = ( 1LL * b * i * i + d * i + e ) % m;
x[i] = ( 1LL * a * i * i + c * i ) % m;
}
do{
upd( aa );
upd( bb );
upd( bb );
}while( aa.x != bb.x || aa.y != bb.y );
bb = aa;
do{
upd( bb );
n1++;
}while( aa.x != bb.x || aa.y != bb.y );
aa.x = bb.x = t2;
aa.y = bb.y = t1;
for(i=2;i<=n1+1;i++){
upd(aa);
}
while( aa.x != bb.x || aa.y != bb.y ){
upd( aa );
upd( bb );
n2++;
}
bb = aa;
aa.x = t2;
aa.y = t1;
if( n2 >= n ){
for(i=1;i<=n;i++){
upd( aa );
}
fprintf(g,"%d",aa.y);
return 0;
}
n -= n2;
n %= n1;
for(i=1;i<=n;i++){
upd( bb );
}
fprintf(g,"%d",bb.y);
fclose(f);
fclose(g);
return 0;
}