Pagini recente » Cod sursa (job #532601) | Cod sursa (job #2420278) | Cod sursa (job #582187) | Cod sursa (job #1769000) | Cod sursa (job #1389590)
#include <fstream>
using namespace std;
ifstream f("rsir.in");
ofstream g("rsir.out");
long long T0,T1,a,b,x,y,z,M,N,Mod0[7005],Mod1[7005];
pair <int,int> succ(pair <int,int> p)
{
long long T0=p.first,T1=p.second;
int aux=T1;
T1=Mod0[T0]+Mod1[T1];
T1%=M;
T0=aux;
return make_pair(T0,T1);
}
void Solve()
{
T0%=M;
T1%=M;
a%=M;
b%=M;
x%=M;
y%=M;
z%=M;
for(int i=0;i<M;i++)
{
Mod0[i]=(i*i*a+x*i+z)%M;
Mod1[i]=(i*i*b+y*i)%M;
}
pair <int,int> tortoise=succ(make_pair(T0,T1));
pair <int,int> hare=succ(succ(make_pair(T0,T1)));
while(tortoise!=hare)
{
tortoise=succ(tortoise);
hare=succ(succ(hare));
}
int first=1;
tortoise=make_pair(T0,T1);
while(tortoise!=hare)
{
tortoise=succ(tortoise);
hare=succ(hare);
first++;
}
int last=2;
hare=succ(tortoise);
while(tortoise!=hare)
{
hare=succ(hare);
last++;
}
if(N<last)
{
tortoise=make_pair(T0,T1);
for(int i=2;i<=N;i++)
tortoise=succ(tortoise);
g<<tortoise.second<<"\n";
return;
}
int diff=last-first;
N=N-last+1;
N%=diff;
for(int i=2;i<=N;i++)
{
hare=succ(hare);
}
g<<hare.second<<"\n";
}
int main()
{
f>>T0>>T1>>a>>b>>x>>y>>z>>M>>N;
Solve();
return 0;
}