Pagini recente » Cod sursa (job #2796539) | Cod sursa (job #1943892) | Cod sursa (job #987126) | Cod sursa (job #792789) | Cod sursa (job #893448)
Cod sursa(job #893448)
#include<stdio.h>
#include<set>
using namespace std;
#define pi pair<int,int>
#define x first
#define y second
#define mp make_pair
#define ll long long
ll n;
int t0,t1,a,b,x,y,z,MOD,ind1;
int prep[2][7005],val;
pi val1,val2;
inline pi Next(pi per)
{
val = prep[0][per.x] + prep[1][per.y];
if(val >= MOD)
val -= MOD;
return mp(per.y, val);
}
int main ()
{
int i;
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,&MOD,&n);
if(!n)
{
printf("%d\n",t0);
return 0;
}
if(n == 1)
{
printf("%d\n",t1);
return 0;
}
for(i = 0; i < MOD; i++)
{
prep[0][i] = (((i * i) % MOD) * a + i * x + z) % MOD;
prep[1][i] = (((i * i) % MOD) * b + i * y) % MOD;
}
ind1 = 1;
val1 = mp(t0 % MOD,t1 % MOD);
val2 = mp(t0 % MOD,t1 % MOD);
if(n <= 1000 * 1000)
{
for(i = 2; i <= n; i++)
val1 = Next(val1);
printf("%d\n",val1.y);
return 0;
}
for(; ;)
{
ind1++;
val1 = Next(val1);
val2 = Next(Next(val2));
if(val1 == val2)
break;
}
i = ind1 - 1;
n = (n - ind1) % i;
for(val2 = val1; n; n--, val2 = Next(val2));
printf("%d\n",val2.y);
return 0;
}