Pagini recente » Cod sursa (job #2391066) | Cod sursa (job #324909)
Cod sursa(job #324909)
#include <cstdio>
#define file_in "rsir.in"
#define file_out "rsir.out"
#define Nmax 7010
int t0,t1,x,y,a,b,z,m;
int x1[Nmax];
int x2[Nmax];
long long n;
int tt0,tt1,ttt0,ttt1,t40,t41;
void go(int &t0,int &t1)
{
int c=t1;
t1=x1[t0]+x2[t1]+z;
t1%=m;
t0=c;
}
int main()
{
int i;
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d %d %d %d %d %d %d %d %lld", &t0,&t1,&a,&b,&x,&y,&z,&m,&n);
t0%=m;
t1%=m;
if (n==0)
{
printf("%d", t0);
fclose(stdin);
fclose(stdout);
return 0;
}
if (n==1)
{
printf("%d", t1);
fclose(stdin);
fclose(stdout);
return 0;
}
for (i=0;i<m;++i)
x1[i]=(i*i*a+x*i)%m;
for (i=0;i<m;++i)
x2[i]=(i*i*b+y*i)%m;
/*for (i=0;i<m;++i)
printf("%d %d\n", x1[i],x2[i]);*/
tt0=ttt0=t40=t0;
tt1=ttt1=t41=t1;
while(tt0==t0 || tt1==t1)
{
go(t0,t1);
go(tt0,tt1);
go(tt0,tt1);
}
while(tt0==t0 || tt1==t1)
{
go(t0,t1);
}
while(t40==t0 || t41==t1)
{
n--;
go(t40,t41);
if (n==0)
{
printf("%d", t41);
fclose(stdin);
fclose(stdout);
return 0;
}
}
for (i=1;i<n;++i)
go(t40,t41);
printf("%d\n", t41);
fclose(stdin);
fclose(stdout);
return 0;
}