Pagini recente » Cod sursa (job #2517179) | Cod sursa (job #2407953) | Cod sursa (job #595198) | Cod sursa (job #1521075) | Cod sursa (job #108222)
Cod sursa(job #108222)
#include <stdio.h>
struct stare{long long x,y;} p1,p2,p;
long long 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("%lld %lld %lld %lld %lld %lld %lld %lld %lld",&p1.x,&p1.y,&a,&b,&x,&y,&z,&m,&n);
p2=p1;
p1.x%=m;p2.x%=m;
p1.y%=m;p2.y%=m;
ax1=p1.x;ax2=p1.y;
p1.x=p1.y;
p1.y=(ax1*ax1*a + ax2*ax2*b + ax1*x + ax2*y + z)%m;
while (p1.y>=m) p1.y-=m;
ax1=p2.x;ax2=p2.y;
p2.x=p2.y;
p2.y=(ax1*ax1*a + ax2*ax2*b + ax1*x + ax2*y + z);
while (p2.y>=m) p2.y-=m;
ax1=p2.x;ax2=p2.y;
p2.x=p2.y;
p2.y=(ax1*ax1*a + ax2*ax2*b + ax1*x + ax2*y + z);
while (p2.y>=m) p2.y-=m;
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;
while (p1.y>=m) p1.y-=m;
ax1=p2.x;ax2=p2.y;
p2.x=p2.y;
p2.y=(ax1*ax1*a + ax2*ax2*b + ax1*x + ax2*y + z);
while (p2.y>=m) p2.y-=m;
ax1=p2.x;ax2=p2.y;
p2.x=p2.y;
p2.y=(ax1*ax1*a + ax2*ax2*b + ax1*x + ax2*y + z);
while (p2.y>=m) p2.y-=m;
if (i==n) {printf("%lld",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);
while (p1.y>=m) p1.y-=m;
if (i==n) {printf("%lld",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);
while (p1.y>=m) p1.y-=m;
}
// printf("%ld %ld %ld\n",p.x,p.y,l);
printf("%lld",p1.y);
return 0;
}