Cod sursa(job #355902)

Utilizator sealTudose Vlad seal Data 12 octombrie 2009 16:52:06
Problema Rsir Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<cstdio>
#define MMAX 7000
#define ll long long
using namespace std;
int A[MMAX],B[MMAX],t0,t1,a,b,x,y,z,m;
ll n;

inline void next(int &t0, int &t1)
{
	int t2=A[t0]+B[t1]+z;

	while(t2>=m)
		t2-=m;
	t0=t1; t1=t2;
}

int main()
{
	int i,T0,T1;

	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);

	for(i=0;i<m;++i)
	{
		A[i]=((ll)a*i*i+x*i)%m;
		B[i]=((ll)b*i*i+y*i)%m;
	}

	t0%=m; t1%=m; z%=m;
	for(i=0;i<n && i<m*m;++i)
		next(t0,t1);

	if(i==n)
	{
		printf("%d\n",t0);
		return 0;
	}

	n-=i;
	T0=t0; T1=t1; i=0;
	do
	{
		next(T0,T1);
		++i;
	} while(T0!=t0 || T1!=t1);

	n%=i;
	while(n--)
		next(t0,t1);

	printf("%d\n",t0);
	return 0;
}