Nu aveti permisiuni pentru a descarca fisierul grader_test33.ok

Cod sursa(job #188253)

Utilizator C_OvidiuCotletz Ovidiu C_Ovidiu Data 7 mai 2008 17:10:36
Problema Rsir Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include<stdio.h>
unsigned long T0,T1,a,b,x,y,z,M,n,t0,t1,T11,T22;

void citire()
{
 freopen("rsir.in","r",stdin);
 scanf("%lu%lu%lu%lu%lu%lu%lu%lu%lu",&T0,&T1,&a,&b,&x,&y,&z,&M,&n);
 if(T0) T0%=M;
 if(T1) T1%=M;
 if(a) a%=M;
 if(b) b%=M;
 if(x) x%=M;
 if(y) y%=M;
 if(z) z%=M;

 }

void gasire_ciclu()
{
 //aici gasesc t0,t1,T11,T22

 unsigned long i,j,T1i,T1j,T2i,T2j,T3; i=j=0;
 T1i=T1j=T0;
 T2i=T2j=T1;
 do
   {//incrementez icu 1
    T3=(a*T1i*T1i+b*T2i*T2i+x*T1i+y*T2i+z)%M;
    T1i=T2i;
    T2i=T3;
    i++;

    //incrementez j cu 2
    T3=(a*T1j*T1j+b*T2j*T2j+x*T1j+y*T2j+z)%M;
    T1j=T2j;
    T2j=T3;

    T3=(a*T1j*T1j+b*T2j*T2j+x*T1j+y*T2j+z)%M;
    T1j=T2j;
    T2j=T3;
    j+=2;



    } while(T1i!=T1j||T2i!=T2j);
 t0=j-i;
 t1=i-1;
 T11=T1i;
 T22=T2i;
 }



void rezolvare(unsigned long T1,unsigned long T2,unsigned long n)
{unsigned long i=2,T3;

 freopen("rsir.out","w",stdout);

 if(n==1)
    {
     printf("%lu",T1);
     fclose(stdout);
     return;
     }
    else if(n==2)
      {printf("%lu",T2);
       fclose(stdout);
       return;
      }




 while(i<n)
    {
     T3=(a*T1*T1+b*T2*T2+x*T1+y*T2+z)%M;
     T1=T2;
     T2=T3;
     i++;

     }
 printf("%lu",T2);
 fclose(stdout);

 return ;
}






int main()
{

 citire();
 gasire_ciclu();

 if(n>t1)
   {
   n=(n-t1)%t0;
   if(!n) n=t0;
   rezolvare(T11,T22,n);
   }
 else
    rezolvare(T0,T1,n+1);

  return 0;
 }