Pagini recente » Cod sursa (job #1408699) | Cod sursa (job #1869775) | Cod sursa (job #1140119) | Cod sursa (job #1364810) | Cod sursa (job #927927)
Cod sursa(job #927927)
#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);
tm1=t0; t=t1; poz=1; rez=-1;
for (i=1;i<=m*m+2;i++)
{
tm2=tm1; tm1=t;
poz++; t=(a*tm2*tm2 + b*tm1*tm1 + x*tm2 + y*tm1 + z)%m;
if(n==poz)
{ rez=t; break; }
}
q=tm2; w=tm1;
while ((1)&&(rez==-1))
{
poz++; per++;
tm2=tm1; tm1=t;
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; }
}
//per--;
per++;
if (rez==-1)
{
n-=poz;
n=n-n/per*per;
for (i=1;i<=n;i++)
{
tm2=tm1; tm1=t;
t=(a*tm2*tm2 + b*tm1*tm1 + x*tm2 + y*tm1 + z)%m;
}
rez=t;
}
printf("%ld",rez);
return 0;
}