39 lines
804 B
ObjectPascal
39 lines
804 B
ObjectPascal
function binomial(n, k: integer): biginteger;
|
|
begin
|
|
result := 1bi;
|
|
for var i := 1 to k do
|
|
result := result * (n - i + 1) div i;
|
|
end;
|
|
|
|
function factorial(n: integer): biginteger;
|
|
begin
|
|
result := 1bi;
|
|
for var i := 2 to n do
|
|
result *= i;
|
|
end;
|
|
|
|
function lah(n, k: integer; signed: boolean := false): biginteger;
|
|
begin
|
|
if (n = 0) or (k = 0) or (k > n) then result := 0bi
|
|
else
|
|
if n = k then result := 1bi
|
|
else
|
|
if k = 1 then result := factorial(n)
|
|
else
|
|
begin
|
|
result := binomial(n, k) * binomial(n - 1, k - 1) * factorial(n - k);
|
|
if signed and ((n and 1) <> 0) then result := -result;
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
for var n := 0 to 12 do
|
|
begin
|
|
for var k := 0 to n do
|
|
print(lah(n, k));
|
|
println;
|
|
end;
|
|
println;
|
|
(1..100).Select(k -> lah(100, k)).Max.Println;
|
|
end.
|