Lah numbers: Difference between revisions

Added Prolog solution
(Added C++ solution)
(Added Prolog solution)
Line 775:
 
The maximum l(100,k): 4451900544899314481...0000000000000000000 (164 digits)
</pre>
 
=={{header|Prolog}}==
{{works with|SWI Prolog}}
<lang prolog>% Reference: https://en.wikipedia.org/wiki/Lah_number#Identities_and_relations
 
:- dynamic unsigned_lah_number_cache/3.
 
unsigned_lah_number(N, N, 1):-!.
unsigned_lah_number(_, 0, 0):-!.
unsigned_lah_number(N, K, 0):-
K > N,
!.
unsigned_lah_number(N, K, L):-
unsigned_lah_number_cache(N, K, L),
!.
unsigned_lah_number(N, K, L):-
N1 is N - 1,
K1 is K - 1,
unsigned_lah_number(N1, K, L1),
unsigned_lah_number(N1, K1, L2),
!,
L is (N1 + K) * L1 + L2,
assertz(unsigned_lah_number_cache(N, K, L)).
 
print_unsigned_lah_numbers(N):-
between(1, N, K),
unsigned_lah_number(N, K, L),
writef('%11r', [L]),
fail.
print_unsigned_lah_numbers(_):-
nl.
 
print_unsigned_lah_numbers:-
between(1, 12, N),
print_unsigned_lah_numbers(N),
fail.
print_unsigned_lah_numbers.
 
max_unsigned_lah_number(N, M):-
findall(L, (between(1, N, K), unsigned_lah_number(N, K, L)), List),
max_list(List, M).
 
main:-
writeln('Unsigned Lah numbers up to L(12,12):'),
print_unsigned_lah_numbers,
writeln('Maximum value of L(n,k) where n = 100:'),
max_unsigned_lah_number(100, M),
writeln(M).</lang>
 
{{out}}
<pre>
Unsigned Lah numbers up to L(12,12):
1
2 1
6 6 1
24 36 12 1
120 240 120 20 1
720 1800 1200 300 30 1
5040 15120 12600 4200 630 42 1
40320 141120 141120 58800 11760 1176 56 1
362880 1451520 1693440 846720 211680 28224 2016 72 1
3628800 16329600 21772800 12700800 3810240 635040 60480 3240 90 1
39916800 199584000 299376000 199584000 69854400 13970880 1663200 118800 4950 110 1
479001600 2634508800 4390848000 3293136000 1317254400 307359360 43908480 3920400 217800 7260 132 1
Maximum value of L(n,k) where n = 100:
44519005448993144810881324947684737529186447692709328597242209638906324913313742508392928375354932241404408343800007105650554669129521241784320000000000000000000000
</pre>
 
1,777

edits