Cod sursa(job #2488843)

Utilizator ivddabDabelea Ioana-Viviana ivddab Data 7 noiembrie 2019 18:07:52
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#define MOD 666013
using namespace std;
ifstream f("kfib.in");
ofstream g("kfib.out");
int i,j,n;
struct matrix{
  long long int mat[4][4];
};
const matrix null={
  {{0,0,0},
   {0,1,0},
   {0,0,1}}
};
const matrix initmat={
  {{0,0,0},
   {0,1,1},
   {0,1,0}}
};
matrix inmultire( matrix a, matrix b ){
   matrix rez;
   rez.mat[1][1]=(a.mat[1][1]*b.mat[1][1]+a.mat[1][2]*b.mat[2][1])%MOD;
   rez.mat[1][2]=(a.mat[1][1]*b.mat[1][2]+a.mat[1][2]*b.mat[2][2])%MOD;
   rez.mat[2][1]=(a.mat[2][1]*b.mat[1][1]+a.mat[2][2]*b.mat[2][1])%MOD;
   rez.mat[2][2]=(a.mat[2][1]*b.mat[1][2]+a.mat[2][2]*b.mat[2][2])%MOD;
   return rez;
}
matrix ridicare( matrix k,int n ){
  if(n==0) return null;
    else
  if(n%2==1) return inmultire(k,ridicare(inmultire(k,k),n/2));
    else     return ridicare(inmultire(k,k),n/2);
}
int main()
{
    f>>n;
    g<<ridicare(initmat,n).mat[1][2]<<' ';
    return 0;
}