Pagini recente » Cod sursa (job #2480501) | Cod sursa (job #2476194) | Cod sursa (job #2575717) | Cod sursa (job #23467) | Cod sursa (job #124191)
Cod sursa(job #124191)
#include<stdio.h>
struct nod
{ int suc;
int poz;
nod *next;
};
long int a,b,x,y,z,m,t0,t1,t2,i,p2[7001],e0[7001],e1[7001],p1,p0,k;
long long int n,pas,r;
nod *p[7001],*pp;
void pune();
int main()
{ FILE *f=fopen("rsir.in","r"), *g=fopen("rsir.out","w");
fscanf(f,"%ld%ld",&t0,&t1);
fscanf(f,"%ld%ld",&a,&b);
fscanf(f,"%ld%ld%ld",&x,&y,&z);
fscanf(f,"%ld",&m);
fscanf(f,"%lld",&n);
t0=t0%m; t1=t1%m;
for(i=0;i<m;i++) p2[i]=(i*i)%m;
for(i=0;i<m;i++) { e0[i]=(a*p2[i]+x*i+z)%m;
e1[i]=(b*p2[i]+y*i)%m;
}
for(i=0;;i++)
{ pune(); pp=p[e0[t0]]->next;
while(pp){ if(pp->suc==t1)
{p1=1+p[e0[t0]]->poz; p0=1+pp->poz; break;}
pp=pp->next;
}
if(pp) break;
t2=(e0[t0]+e1[t1])%m;
t0=t1; t1=t2;
}
t2=(e0[t0]+e1[t1])%m;t0=t1; t1=t2;
pas=(long long int)p1-(long long int)p0;
r=(n-(long long int)p0)%pas;
k=(long int)r;
for(i=1;i<=k;i++)
{ t2=(e0[t0]+e1[t1])%m;
t0=t1;
t1=t2;
}
fprintf(g,"%ld",t0);
fcloseall();
return 0;
}
void pune()
{ nod *paux;
paux=new nod;
paux->suc=t1;
paux->poz=i;
if(!p[e0[t0]]){ paux->next=0; p[e0[t0]]=paux; return;}
paux->next=p[e0[t0]]; p[e0[t0]]=paux;
}