Cod sursa(job #1294991)

Utilizator gedicaAlpaca Gedit gedica Data 18 decembrie 2014 17:09:57
Problema Al k-lea termen Fibonacci Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>

using namespace std;

const int MOD= 666013;

ifstream in( "kfib.in" );
ofstream out( "kfib.out" );

int f1[2][3], f2[2][3] , b[3][3];

void init()
{
    b[1][1]=0;
    b[1][2]=1;
    b[2][1]=1;
    b[2][2]=1;

    f1[1][1]= 1;
    f1[1][2]= 1;

}

void next_fib()
{
    for( int i= 1; i<=1; ++i )
    {
        for( int j= 1; j<=2; ++j )
        {
            f2[i][j]= 0;
            for( int k= 1; k<=2; ++k )
            {
                f2[i][j]= (f2[i][j]+f1[i][k]*b[k][j])%MOD;
            }
        }
    }
    for( int i= 1; i<=1; ++i )
    {
        for( int j= 1; j<=2; ++j )
        {
            swap( f1[i][j], f2[i][j] );
        }
    }
}

int main(  )
{
    int K;

    in >> K;

    init();

    if( K==1 )
    {
       out << "1" << '\n';
       return 0;
    }
    else if ( K==2 )
    {
        out << "2" << '\n';
        return 0;
    }

    for( int i= 3; i<=K; ++i )
    {
        next_fib();
    }

    out << f1[1][2];

    return 0;
}