Pagini recente » Cod sursa (job #1170793) | Cod sursa (job #3216625) | Cod sursa (job #1166319) | Cod sursa (job #973465) | Cod sursa (job #134662)
Cod sursa(job #134662)
#include<stdio.h>
struct nod{int s;int ind;nod *next;};
nod *p[7000],*pp;
long int t0,t1,a,b,x,y,z,m,j0,j1,f0[7000],f1[7000],i,p2,per,t2,nn;
long long int n;
void pune(long int jj);
int main()
{
FILE *f,*g;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);
t0=t0%m;t1=t1%m;
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;
pp=p[t0];
for(pp=p[t0];pp;pp=pp->next)
if(pp->s==t1)break;
if(pp){j0=pp->ind;per=j1-j0;}
else pune(j1);
}
n=n-(long long int)j1;
n=n%(long long int)per;
nn=(long int)n;
for(i=1;i<=nn;i++)
{ t2=f0[t0]+f1[t1];if(t2>=m)t2-=m;t0=t1;t1=t2;}
fprintf(g,"%d\n",t0);
fcloseall();
return 0;
}
void pune(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;
}