Pagini recente » Cod sursa (job #2647518) | Cod sursa (job #310982) | Cod sursa (job #905832) | Cod sursa (job #158862) | Cod sursa (job #108204)
Cod sursa(job #108204)
#include <stdio.h>
struct stare{long int x,y;} p1,p2,p;
long int a,b,x,y,z,m,l,i,j,k,ax1,ax2;
long long n;
int main()
{
freopen("rsir.in","r",stdin);
freopen("rsir.out","w",stdout);
scanf("%ld %ld %ld %ld %ld %ld %ld %ld %lld",&p1.x,&p1.y,&a,&b,&x,&y,&z,&m,&n);
p2=p1;
for (i=2;(p1.x!=p2.x)||(p1.y!=p2.y) ;i++)
{
ax1=p1.x;ax2=p1.y;
p1.x=p1.y;
p1.y=(ax1*ax1*a + ax2*ax2*b + ax1*x + ax2*y + z)%m;
ax1=p2.x;ax2=p2.y;
p2.x=p2.y;
p2.y=(ax1*ax1*a + ax2*ax2*b + ax1*x + ax2*y + z)%m;
ax1=p2.x;ax2=p2.y;
p2.x=p2.y;
p2.y=(ax1*ax1*a + ax2*ax2*b + ax1*x + ax2*y + z)%m;
if (i==n) {printf("%ld",p1.y);return 0;}
}
p=p1;
ax1=p1.x;ax2=p1.y;
p1.x=p1.y;
p1.y=(ax1*ax1*a + ax2*ax2*b + ax1*x + ax2*y + z)%m;
++i;
for (l=1;(p1.x!=p.x)||(p1.y!=p.y);i++,l++)
{
ax1=p1.x;ax2=p1.y;
p1.x=p1.y;
p1.y=(ax1*ax1*a + ax2*ax2*b + ax1*x + ax2*y + z)%m;
if (i==n) {printf("%ld",p1.y);return 0;}
}
n-=i;
k=n%l;
for (i=1;i<=k;i++)
{
ax1=p1.x;ax2=p1.y;
p1.x=p1.y;
p1.y=(ax1*ax1*a + ax2*ax2*b + ax1*x + ax2*y + z)%m;
}
printf("%ld",p1.y);
return 0;
}