Pagini recente » Cod sursa (job #225226) | Cod sursa (job #417850) | Cod sursa (job #2154059) | Cod sursa (job #1161005) | Cod sursa (job #1236459)
#include<cstdio>
using namespace std;
int j,pr,nr2,i,l,nr,m,a,b,c,x,y,z,A[7005],B[7005],v[5];
long long n;
struct str
{
int f,s;
};
str urm(str T)
{
str rez;
int a=A[T.f]+B[T.s];
if(a>=m) a=a-m;
rez.f=T.s;
rez.s=a;
return rez;
}
str p1,p2,t0,t1,t2;
int main()
{
freopen("rsir.in","r",stdin);
freopen("rsir.out","w",stdout);
scanf("%d",&t0.f);
scanf("%d",&t0.s);
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&x);
scanf("%d",&y);
scanf("%d",&z);
scanf("%d",&m);
scanf("%lld",&n);
for(i=0;i<m;i++)
{
A[i]=((i*i)%m*a+i*x)%m;
B[i]=((i*i)%m*b+i*y+z)%m;
}
nr=m*m+2;
t0.f=t0.f%m;
t0.s=t0.s%m;
t1=t0;
for(i=2;i<=nr;i++)
t1=urm(t1);
t2=t1;
t1=t0;
nr2=0;
for(i=1;i<=nr;i++)
{
if(t1.f==t2.f&&t1.s==t2.s)
{
nr2++;
v[nr2]=i;
if(nr2==2) break;
}
t1=urm(t1);
}
l=v[2]-v[1];
p1=t0;////pozitia 1
p2=t0;////pozitia 1 pe care o fac l+1
for(i=2;i<=l+1;i++)
p2=urm(p2);
if(p1.f==p2.f&&p1.s==p2.s) pr=1;
for(i=2;i<=nr;i++)
{
p1=urm(p1);
p2=urm(p2);
if(p1.f==p2.f&&p2.f==p2.s)
{
pr=i;
break;
}
}
/*t1=t0;
for(i=1;i<pr;i++)
{
printf("%d ",t1.f);
t1=urm(t1);
}
for(i=1;i<=30;i++)
{
printf("\n");
for(j=1;j<=l;j++)
{
printf("%d ",t1.f);
t1=urm(t1);
}
}
printf("\n");*/
//return 0;
//////pr-1 lungimea neperioadei
if(n<=pr-1)
{
p1=t0;
for(i=1;i<n;i++)
p1=urm(p1);
printf("%d\n",p1.s);
}
else
{
n=n-pr+1;
if(n%l==0) n=l;
else n=n%l;
n=n+pr-1;
p1=t0;
for(i=1;i<n;i++)
p1=urm(p1);
printf("%d\n",p1.s);
}
//printf("%d\n",l);
return 0;
}