Cod sursa(job #2227680)

Utilizator pinteastefanPintea Teodor Stefan pinteastefan Data 1 august 2018 15:04:54
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.51 kb
#include <fstream>

using namespace std;

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

long long number, valueX, valueY, answer = 1, matrix[2][2], finalMatrix[2][2], B[2][2], C[2][2], D[1][2], E[1][2];
long long mod = 199973;

// functie pentru inmultirea matricelor
void multiplication(long long A[][2], long long B[][2], long long C[][2]) {
    int i, j, k;
    for (i = 1; i <= 2; i++)
        for (j = 1; j <= 2; j++)
            for (k = 1; k <= 2; k++)
                C[i][j] = (C[i][j] + 1LL * A[i][k] * B[k][j]) % mod;




}
int main() {
    valueX = 1;
    valueY = 1;
    D[1][1] = valueX;
    D[1][2] = valueY;

    matrix[1][1] = 0;
    matrix[1][2] = 1;
    matrix[2][1] = 1;
    matrix[2][2] = 1;

    B[1][1] = 0;
    B[1][2] = 1;
    B[2][1] = 1;
    B[2][2] = 1;

    finalMatrix[1][1] = 0;
    finalMatrix[1][2] = 0;
    finalMatrix[2][1] = 0;
    finalMatrix[2][2] = 0;

    inputfile >> number;

    for(int i = 1; i < number - 2; i++)
    {
        multiplication(B, matrix, finalMatrix);

        B[1][1] = finalMatrix [1][1];
        B[1][2] = finalMatrix [1][2];
        B[2][1] = finalMatrix [2][1];
        B[2][2] = finalMatrix [2][2];

        C[1][1] = finalMatrix [1][1];
        C[1][2] = finalMatrix[1][2];
        C[2][1] = finalMatrix[2][1];
        C[2][2] = finalMatrix[2][2];

        finalMatrix[1][1] = 0;
        finalMatrix[1][2] = 0;
        finalMatrix[2][1] = 0;
        finalMatrix[2][2] = 0;
    }



    multiplication(D,C,E);

    outputfile << E[1][2]<<"\n";


    return 0;
}