Cod sursa(job #805450)

Utilizator alex45meOlaru Alex alex45me Data 31 octombrie 2012 15:03:00
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <stdio.h>


FILE *f=fopen("kfib.in","r");
FILE *g=fopen("kfib.out","w");

unsigned long long k;
int i,ms;

void produs(int p1[3][3],int p2[3][3])
 {
     int i,j,ax[3][3];
     long long cn;
       for (i=1;i<=2; i++)
         for (j=1;j<=2; j++)
           for (k=1,ax[i][j]=0;k<=2; k++){
                 cn=((long long)p1[i][k]*p2[k][j])% ms;
                 ax[i][j]=((long long)ax[i][j]+cn) % ms;

           }
         for (i=1;i<=2; i++)
         for (j=1;j<=2; j++)
           p1[i][j]=ax[i][j];
 }




void ridic(int k)
{

    int p[3][3],nr[3][3];
    p[1][1]=p[1][2]=p[2][1]=1;
    p[2][2]=0;
    nr[1][1]=nr[2][2]=1;
    nr[1][2]=nr[2][1]=0;
    for (i=0;i<=31;i++, produs(p,p))
       if(k&(1<<i))
           produs(nr,p);
    fprintf(g,"%d",(nr[1][1]+nr[1][2])%ms);




}



using namespace std;

int main()
{
    ms=666013;
    fscanf(f,"%d",&k);
    if (k>2)
   {

      ridic(k-2);
        }
       else fprintf(g,"%d",1);



        return 0;
}