Cod sursa(job #927927)

Utilizator lianaliana tucar liana Data 26 martie 2013 09:45:01
Problema Rsir Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<stdio.h>
long long t0, t1, a, b, x, y, z, m, n, rez, tm1, tm2, t, q, w;
long i, poz, per;

int main()
{
    freopen("rsir.in","r",stdin);
    freopen("rsir.out","w",stdout);
    scanf("%ld %ld %ld %ld %ld %ld %ld %ld %ld",&t0,&t1,&a,&b,&x,&y,&z,&m,&n);
    tm1=t0; t=t1; poz=1;  rez=-1;
    for (i=1;i<=m*m+2;i++)
    {
        tm2=tm1;    tm1=t;
        poz++;  t=(a*tm2*tm2 + b*tm1*tm1 + x*tm2 + y*tm1 + z)%m;
        if(n==poz)
        {   rez=t;  break;  }
    }
    q=tm2;  w=tm1;
    while ((1)&&(rez==-1))
    {
        poz++;  per++;
        tm2=tm1;    tm1=t;
        t=(a*tm2*tm2 + b*tm1*tm1 + x*tm2 + y*tm1 + z)%m;
        if ((tm1==q)&&(t==w))
            break;
        if(n==poz)
        {   rez=t;  break;  }
    }
    //per--;
    per++;
    if (rez==-1)
    {
        n-=poz;
        n=n-n/per*per;
        for (i=1;i<=n;i++)
        {
            tm2=tm1;    tm1=t;
            t=(a*tm2*tm2 + b*tm1*tm1 + x*tm2 + y*tm1 + z)%m;
        }
        rez=t;
    }
    printf("%ld",rez);
    return 0;
}