Pagini recente » Monitorul de evaluare | Cod sursa (job #850080) | Cod sursa (job #931982) | Cod sursa (job #1415018) | Cod sursa (job #1305269)
#include <iostream>
#include <cstdio>
using namespace std;
long long a,b,x,y,z,mod,n;
struct State{
long long t0,t1;
State getNext(){
State ans;
ans.t0 = t1;
ans.t1 = a*t0*t0 + b*t1*t1 + x*t0 + y*t1 + z;
ans.t1 %= mod;
return ans;
}
State getNextNext(){
State ans = getNext();
return ans.getNext();
}
bool operator!=(State tmp){
return (tmp.t0 != t0)||(tmp.t1 != t1);
}
};
State p1,p2,beg;
long lC,lCic;
int main()
{
freopen("rsir.in","r",stdin);
freopen("rsir.out","w",stdout);
scanf("%lld %lld %lld %lld %lld %lld %lld %lld %lld",&p1.t0,&p1.t1,&a,&b,&x,&y,&z,&mod,&n);
p1.t1 %= mod; p1.t0 %= mod; beg = p1;
p2 = p1.getNext(); lCic = 1;
while(p1 != p2){
p1 = p1.getNext();
p2 = p2.getNextNext();
lCic++;
}
p1 = beg; lC = 0; p2 = p2.getNext();
while(p1 != p2) {
p1 = p1.getNext();
p2 = p2.getNext();
lC++;
}
if(n <= lC){
for(long i = 2;i<=n;i++) beg = beg.getNext();
printf("%ld",beg.t1);
} else {
n -= lC; n%=lCic; if(!n) n = lCic;
for(long i = 2;i<=n;i++)
p1 = p1.getNext();
printf("%ld",p1.t1);
}
return 0;
}