Pagini recente » Cod sursa (job #402930) | Cod sursa (job #2494781) | Cod sursa (job #2157998) | Cod sursa (job #2404950) | Cod sursa (job #927295)
Cod sursa(job #927295)
#include<stdio.h>
long long t0, t1, a, b, x, y, z, m, n, rez, tm1, tm2, t, q, w;
long i, poz, per;
int main()
{
freopen("rsir.in","r",stdin);
freopen("rsir.out","w",stdout);
scanf("%ld %ld %ld %ld %ld %ld %ld %ld %ld",&t0,&t1,&a,&b,&x,&y,&z,&m,&n);
tm2=t0; tm1=t1; poz=1; rez=-1;
for (i=1;i<=m*m+2;i++)
{
poz++; t=(a*tm2*tm2 + b*tm1*tm1 + x*tm2 + y*tm1 + z)%m;
tm2=tm1; tm1=t;
if(n==poz)
{ rez=t; break; }
}
q=tm2; w=tm1;
while ((1)&&(rez==-1))
{
poz++; per++;
t=(a*tm2*tm2 + b*tm1*tm1 + x*tm2 + y*tm1 + z)%m;
if ((tm1==q)&&(t==w))
break;
if(n==poz)
{ rez=t; break; }
tm2=tm1; tm1=t;
}
per--;
if (rez==-1)
{
n-=poz;
n=n-n/per*per;
for (i=1;i<=per;i++)
{
t=(a*tm2*tm2 + b*tm1*tm1 + x*tm2 + y*tm1 + z)%m;
tm2=tm1; tm1=t;
}
rez=t;
}
printf("%ld",rez);
return 0;
}