Lah numbers: Difference between revisions
Content added Content deleted
m (→{{header|REXX}}: added zkl header) |
(→{{header|zkl}}: added code) |
||
Line 353: | Line 353: | ||
=={{header|zkl}}== |
=={{header|zkl}}== |
||
<lang zkl>fcn lah(n,k,fact=fcn(n){ [1..n].reduce('*,1) }){ |
|||
if(n==0 or k==0) return(0); |
|||
if(n==k) return(1); |
|||
if(k==1) return(fact(n)); |
|||
(fact(n)*fact(n - 1)) /(fact(k)*fact(k - 1)) /fact(n - k) |
|||
}</lang> |
|||
<lang zkl>// calculate entire table (quick), find max, find num digits in max |
|||
N,mx := 12, [1..N].apply(fcn(n){ [1..n].apply(lah.fp(n)) }).flatten() : (0).max(_); |
|||
fmt:="%%%dd".fmt("%d".fmt(mx.numDigits + 1)).fmt; // "%9d".fmt |
|||
println("Unsigned Lah numbers: L(n,k):"); |
|||
println("n\\k",[0..N].pump(String,fmt)); |
|||
foreach row in ([0..N]){ |
|||
println("%3d".fmt(row), [0..row].pump(String, lah.fp(row), fmt)); |
|||
}</lang> |
|||
{{out}} |
|||
<pre style="font-size:83%"> |
|||
Unsigned Lah numbers: L(n,k): |
|||
n\k 0 1 2 3 4 5 6 7 8 9 10 11 12 |
|||
0 0 |
|||
1 0 1 |
|||
2 0 2 1 |
|||
3 0 6 6 1 |
|||
4 0 24 36 12 1 |
|||
5 0 120 240 120 20 1 |
|||
6 0 720 1800 1200 300 30 1 |
|||
7 0 5040 15120 12600 4200 630 42 1 |
|||
8 0 40320 141120 141120 58800 11760 1176 56 1 |
|||
9 0 362880 1451520 1693440 846720 211680 28224 2016 72 1 |
|||
10 0 3628800 16329600 21772800 12700800 3810240 635040 60480 3240 90 1 |
|||
11 0 39916800 199584000 299376000 199584000 69854400 13970880 1663200 118800 4950 110 1 |
|||
12 0 479001600 2634508800 4390848000 3293136000 1317254400 307359360 43908480 3920400 217800 7260 132 1 |
|||
</pre> |
|||
{{libheader|GMP}} GNU Multiple Precision Arithmetic Library |
|||
<lang zkl>var [const] BI=Import("zklBigNum"); // libGMP |
|||
N=100; |
|||
println("Maximum value from the L(%d, *) row:".fmt(N)); |
|||
[1..N].apply(lah.fpM("101",BI(N),fcn(n){ BI(n).factorial() })) |
|||
.reduce(fcn(m,n){ m.max(n) }).println();</lang> |
|||
{{out}} |
|||
<pre style="font-size:83%"> |
|||
Maximum value from the L(100, *) row: |
|||
44519005448993144810881324947684737529186447692709328597242209638906324913313742508392928375354932241404408343800007105650554669129521241784320000000000000000000000 |
|||
</pre> |