Pagini recente » Cod sursa (job #921272) | Cod sursa (job #1549779) | Cod sursa (job #388257) | Cod sursa (job #2617972) | Cod sursa (job #324921)
Cod sursa(job #324921)
#include <cstdio>
#define file_in "rsir.in"
#define file_out "rsir.out"
#define Nmax 7012
int t0,t1,x,y,a,b,z,m,mod=0;
long long x1[Nmax];
long long x2[Nmax];
long long n;
int tt0,tt1,t40,t41;
inline void go(int &t0,int &t1)
{
int c=t1;
t1=x1[t0]+x2[t1];
if (t1>=m)
t1-=m;
t1+=z;
if (t1>=m)
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;
z%=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]=(1LL*i*i*a+x*i)%m;
for (i=0;i<m;++i)
x2[i]=(1LL*i*i*b+y*i)%m;
//for (i=0;i<m;++i)
// printf("%d %d\n", x1[i],x2[i]);
tt0=t40=t0;
tt1=t41=t1;
do
{
go(t0,t1);
go(tt0,tt1);
go(tt0,tt1);
}
while ((tt0!=t0) || (tt1!=t1));
do
{
mod++;
go(t0,t1);
}
while ((tt0!=t0) || (tt1!=t1));
while ((t40!=t0) || (t41!=t1))
{
n--;
go(t40,t41);
if (n==0)
{
printf("%d", t41);
fclose(stdin);
fclose(stdout);
return 0;
}
}
n%=mod;
for (i=1;i<n;++i)
go(t40,t41);
printf("%d\n", t41);
fclose(stdin);
fclose(stdout);
return 0;
}