Pagini recente » Cod sursa (job #2425303) | Cod sursa (job #1082869) | Cod sursa (job #883045) | Cod sursa (job #69078) | Cod sursa (job #2006685)
#include <cstdio>
using namespace std;
const int NMAX=7000;
int t0,t1,a,b,x,y,z,m,i;
long long n;
int ind1,ind11,ind2,ind22,strt,l;
int c1[NMAX+5],c2[NMAX+5];
int modd(long long x)
{
if(x>m)
x%=m;
return (int)x;
}
int adv(int &t0,int &t1)
{
int t2;
t2=c1[t0]+c2[t1];
t2-=m*(t2>=m);
return t2;
}
void advn()
{
ind1=t0;
ind11=t1;
while(n--)
{
int ind3=ind11;
ind11=adv(ind1,ind11);
ind1=ind3;
}
printf("%d\n",ind1);
}
int main()
{
freopen("rsir.in","r",stdin);
freopen("rsir.out","w",stdout);
scanf("%d%d%d%d%d%d%d%d%lld",&t0,&t1,&a,&b,&x,&y,&z,&m,&n);
t0=modd(1LL*t0);
t1=modd(1LL*t1);
a=modd(1LL*a);
b=modd(1LL*b);
x=modd(1LL*x);
y=modd(1LL*y);
z=modd(1LL*z);
for(i=0; i<m; ++i)
{
c1[i]=modd(1LL*i*i*a+1LL*i*x);
c2[i]=modd(1LL*i*i*b+1LL*i*y+1LL*z);
}
ind1=ind2=t0;
ind11=ind22=t1;
do
{
int ind3=ind11;
ind11=adv(ind1,ind11);
ind1=ind3;
ind2=adv(ind2,ind22);
ind22=adv(ind22,ind2);
}
while(!(ind1==ind2 && ind11==ind22));
///multiplu
ind1=t0;
ind11=t1;
while(!(ind1==ind2 && ind11==ind22))
{
int ind3=ind11;
ind11=adv(ind1,ind11);
ind1=ind3;
ind3=ind22;
ind22=adv(ind2,ind22);
ind2=ind3;
++strt;
}///poz inceput
if(n<strt)
{
advn();
return 0;
}
ind2=ind1;
ind22=ind11;
do
{
int ind3=ind22;
ind22=adv(ind2,ind22);
ind2=ind3;
++l;
}
while(!(ind1==ind2 && ind11==ind22));
///lungime interval
n=strt+(n-strt)%l;
advn();
return 0;
}