Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
20
Добавлен:
25.04.2015
Размер:
1.11 Кб
Скачать
{$mode objfpc}

const
n = 20;
m = 1000000007;

type TMatrix = array [1..2, 1..2] of integer;

var i: integer;

function mul(A, B: TMatrix): TMatrix;
var
i, j, k: integer;
begin
for i := 1 to 2 do begin
for j := 1 to 2 do begin
result[i, j] := 0;
for k := 1 to 2 do begin
result[i, j] := (result[i, j] + A[i, k]*int64(B[k, j])) mod m;
end;
end;
end;
end;

function deg(A: TMatrix; n: integer): TMatrix;
var
t: TMatrix;
begin
if n = 0 then begin
result[1, 1] := 1; result[1, 2] := 0;
result[2, 1] := 0; result[2, 2] := 1;
exit;
end;
if n mod 2 = 0 then begin
t := deg(A, n div 2);
result := mul(t, t);
end else begin
result := mul(deg(A, n-1), A);
end;
end;

function fib(n: integer): integer;
var
c, A: TMatrix;
begin
A[1, 1] := 0; A[1, 2] := 1;
A[2, 1] := 1; A[2, 2] := 1;
c := deg(A, n);
result := (c[1, 1] + c[1, 2]) mod m;
end;

begin
for i := 0 to n do begin
writeln(fib(i));
end;
end.


















Соседние файлы в папке 14_numeric