Pagini recente » Cod sursa (job #52986) | Cod sursa (job #1395527) | Cod sursa (job #258582) | Cod sursa (job #1732702) | Cod sursa (job #124180)
Cod sursa(job #124180)
#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[t0]->next;
while(pp){ if(pp->suc==t1){p1=p[t0]->poz; p0=pp->poz; break;}
pp=pp->next;
}
if(pp) break;
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[t0]){ paux->next=0; p[t0]=paux; return;}
paux->next=p[t0]; p[t0]=paux;
}