Cod sursa(job #1240668)

Utilizator catalinrebegeaUNIBUC-Claudia Catarig catalinrebegea Data 11 octombrie 2014 21:29:52
Problema Rsir Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>

using namespace std;

long long p1[7005],p2[7005],m,p3[7005],p4[7005];
long long T0,T1,n,T2,T3,T4,a,b,x,y,z;

inline void Precalcul()
{
    int i;
    for(i=0;i<m;++i) p1[i]=(1LL*i*i*a)%m;
    for(i=0;i<m;++i) p2[i]=(1LL*i*i*b)%m;
    for(i=0;i<m;++i) p3[i]=(1LL*i*x)%m;
    for(i=0;i<m;++i) p4[i]=(1LL*i*y)%m;
}

int main()
{
    int pas;
    freopen ("rsir.in","r",stdin);
    freopen ("rsir.out","w",stdout);
    scanf("%lld%lld%lld%lld%lld%lld%lld%lld%lld", &T0,&T1,&a,&b,&x,&y,&z,&m,&n);
    Precalcul();
    T0%=m; T1%=m;
    T2=T1;
    T3 =( p1[T0] + p2[T1] + p3[T0] + p4[T1] + z )%m;
    for(pas=3;!(T2==T0 && T3==T1);++pas)
    {
        T4 = (p1[T2] + p2[T3] + p3[T2] + p4[T3] + z)%m;
        T2=T3; T3=T4;
    }
    n%=(pas-2);
    T2=T1;
    T3 =( p1[T0] + p2[T1] + p3[T0] + p4[T1] + z )%m;
    for(pas=3;pas<=n;++pas)
    {
        T4 = (p1[T2] + p2[T3] + p3[T2] + p4[T3] + z)%m;
        T2=T3; T3=T4;
    }
    printf("%lld\n", T3);
    return 0;
}