//PacalABC
//Рекурсивное решение
function trib(n: integer): biginteger;
begin
if (n = 1) or (n = 2) then trib := 0 else
if (n = 3) then trib := 1;
if (n > 3) then trib := trib(n - 1) + trib(n - 2) + trib(n - 3);
end;
var
n: integer;
write('Введите количество элементов для вывода: ');
read(n);
for var i := 1 to n do
write(trib(i), ' ');
end.
//Решение с помощью формулы (значительно быстрее)
const
tmp = power(33, 0.5);
a1 = power((19 + 3 * tmp), 1 / 3);
a2 = power((19 - 3 * tmp), 1 / 3);
b = power((586 + 102 * tmp), 1 / 3);
if (n = 1) or (n = 2) then trib := 0
else
trib := roundbiginteger(3 * b * ((power((1 / 3 * (a1 + a2 + 1)), n - 1)) / (power(b, 2) - 2 * b + 4)));
Copyright © 2024 SCHOLAR.TIPS - All rights reserved.
Answers & Comments
//PacalABC
//Рекурсивное решение
function trib(n: integer): biginteger;
begin
if (n = 1) or (n = 2) then trib := 0 else
if (n = 3) then trib := 1;
if (n > 3) then trib := trib(n - 1) + trib(n - 2) + trib(n - 3);
end;
var
n: integer;
begin
write('Введите количество элементов для вывода: ');
read(n);
for var i := 1 to n do
write(trib(i), ' ');
end.
//Решение с помощью формулы (значительно быстрее)
const
tmp = power(33, 0.5);
a1 = power((19 + 3 * tmp), 1 / 3);
a2 = power((19 - 3 * tmp), 1 / 3);
b = power((586 + 102 * tmp), 1 / 3);
function trib(n: integer): biginteger;
begin
if (n = 1) or (n = 2) then trib := 0
else
trib := roundbiginteger(3 * b * ((power((1 / 3 * (a1 + a2 + 1)), n - 1)) / (power(b, 2) - 2 * b + 4)));
end;
var
n: integer;
begin
write('Введите количество элементов для вывода: ');
read(n);
for var i := 1 to n do
write(trib(i), ' ');
end.