Cod sursa(job #1349666)

Utilizator laura.calimanLaura Caliman laura.caliman Data 20 februarie 2015 13:13:23
Problema Al k-lea termen Fibonacci Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 0.8 kb
var n,i,k,p:int64;
    m,j:array[1..3,1..3] of longint;
    
procedure inmmatr;
var m:array[1..3,1..3] of longint;
begin
  m[1,1]:=j[1,1]*j[1,1]+j[1,2]*j[2,1];
  m[1,2]:=j[1,1]*j[1,2]+j[1,2]*j[2,2];
  m[2,1]:=j[2,1]*j[1,1]+j[2,2]*j[2,1];
  m[2,2]:=j[2,1]*j[1,2]+j[2,2]*j[2,2];
  j[1,1]:=m[1,1];
  j[1,2]:=m[1,2];
  j[2,1]:=m[2,1];
  j[2,2]:=m[2,2];
end;
    
begin
  assign(input,'kfib.in');
  assign(output,'kfib.out');
  reset(input);
  rewrite(output);
  read(n);
  m[1,1]:=0;
  m[1,2]:=1;
  m[2,1]:=1;
  m[2,2]:=1;
  p:=1;
  k:=666013;
  while n>0 do begin
    i:=1;
    j[1,1]:=m[1,1];
    j[1,2]:=m[1,2];
    j[2,1]:=m[2,1];
    j[2,2]:=m[2,2];
    while i*2<=n do begin
      inmmatr;
      i:=i*2;
    end;
    n:=n-i;
    p:=p*j[2,2];
  end;
  write(p mod k);
end.