Pagini recente » Cod sursa (job #2029752) | Cod sursa (job #1158196) | Cod sursa (job #375044) | Cod sursa (job #1037890) | Cod sursa (job #134675)
Cod sursa(job #134675)
#include<stdio.h>
struct nod{long long int s;long long int ind;nod *next;};
nod *p[100],*pp;
long long int t0,t1,a,b,x,y,z,m,j0,j1,f0[7002],f1[7002],i,p2,per,t2,n;
void pune(long long int jj);
int main()
{
FILE *f,*g;f=fopen("rsir.in","r");g=fopen("rsir.out","w");
fscanf(f,"%lld%lld",&t0,&t1);
fscanf(f,"%lld%lld",&a,&b);
fscanf(f,"%lld%lld%lld",&x,&y,&z);
fscanf(f,"%lld",&m);
t0=t0%m;t1=t1%m;
if(t0<50)pune(0);
fscanf(f,"%lld",&n);
for(i=0;i<m;i++){p2=(i*i)%m;f0[i]=(a*p2+x*i+z)%m;f1[i]=(b*p2+y*i)%m;}
j1=0;
while(!per)
{ j1++;t2=f0[t0]+f1[t1];if(t2>=m)t2-=m;t0=t1;t1=t2;
if(t0<50)
{ pp=p[t0];
while(pp&&(pp->s!=t1))pp=pp->next;
if(pp){j0=pp->ind;per=j1-j0;}
else pune(j1);
}
}
n=n-j0;n=n%per;
for(i=1;i<=n;i++)
{ t2=f0[t0]+f1[t1];if(t2>=m)t2-=m;t0=t1;t1=t2;}
fprintf(g,"%lld\n",t0);
fcloseall();
return 0;
}
void pune(long long int jj)
{
nod *paux;
paux=new nod;
paux->s=t1;paux->ind=jj;
if(!p[t0]){paux->next=0;p[t0]=paux;return;}
paux->next=p[t0];p[t0]=paux;
}