Cod sursa(job #927295)

Utilizator lianaliana tucar liana Data 25 martie 2013 18:37:16
Problema Rsir Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 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);
    tm2=t0; tm1=t1; poz=1;  rez=-1;
    for (i=1;i<=m*m+2;i++)
    {
        poz++;  t=(a*tm2*tm2 + b*tm1*tm1 + x*tm2 + y*tm1 + z)%m;
        tm2=tm1;    tm1=t;
        if(n==poz)
        {   rez=t;  break;  }
    }
    q=tm2;  w=tm1;
    while ((1)&&(rez==-1))
    {
        poz++;  per++;
        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;  }
        tm2=tm1;    tm1=t;
    }
    per--;
    if (rez==-1)
    {
        n-=poz;
        n=n-n/per*per;
        for (i=1;i<=per;i++)
        {
            t=(a*tm2*tm2 + b*tm1*tm1 + x*tm2 + y*tm1 + z)%m;
            tm2=tm1;    tm1=t;
        }
        rez=t;
    }
    printf("%ld",rez);
    return 0;
}