Pagini recente » Cod sursa (job #229942) | Cod sursa (job #1004282) | Cod sursa (job #1081409) | Cod sursa (job #731192) | Cod sursa (job #1265128)
#include<iostream>
#include<fstream>
using namespace std;
#define NMAX 7001
int a,b,x,y,z,MOD;
int va[NMAX],vb[NMAX],vz[NMAX];
int nextterm(int xn_1, int xn)
{
if(xn_1<MOD && xn<MOD) {
int x = va[xn_1] + vb[xn] + vz[z];
while(x>=MOD)
x=x-MOD;
return x;
}
return (0LL + 1LL * a * xn_1 * xn_1 + 1LL * b * xn * xn + 1LL * x * xn_1 + 1LL * y * xn + z)%MOD;
}
void next(int &x, int &y)
{
int xp;
xp=x;
x=y;
y=nextterm(xp,x);
}
void floyd(int x0, int y0, int &start, int &lambda)
{
int y1,y2,x1,x2;
x1=x0;
x2=y0;
y1=x0;
y2=y0;
start=1;
do {
next(x1,x2);
next(y1,y2);
next(y1,y2);
start++;
}while(x1!=y1 || x2!=y2);
lambda=1;
next(y1,y2);
while(x1!=y1 || x2!=y2) {
next(y1,y2);
lambda++;
}
}
int reduce(long long term, int start, int lambda)
{
long dist;
if(term<=start)
return term;
dist=term-start;
dist=1LL*dist/lambda;
return term-1LL*dist*lambda;
}
int main ()
{
int x0,y0,start,lambda,i;
long long n;
ifstream f("rsir.in");
ofstream g("rsir.out");
f>>x0>>y0>>a>>b>>x>>y>>z>>MOD>>n;
f.close();
for(i=0;i<=NMAX-1;i++) {
va[i]=(0LL+1LL*a*i*i+x*i)%MOD;
vb[i]=(0ll+1ll*b*i*i+y*i)%MOD;
vz[i]=i%MOD;
}
floyd(x0,y0,start,lambda);
n=reduce(n,start,lambda);
for(i=1;i<=n;i++)
next(x0,y0);
g<<x0;
g.close();
return 0;
}