Initial data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 72d218235f
commit f23f22d71c
199087 changed files with 3378941 additions and 0 deletions

View file

@ -0,0 +1 @@
multifactorial(N,Degree) = prod([ I : I in N..-Degree..1]).

View file

@ -0,0 +1 @@
multifactorial2(N,Degree) = reduce(*, [I : I in N..-Degree..1]).

View file

@ -0,0 +1,6 @@
multifactorial3(N,Degree) = M =>
M = 1, I = N,
while(I > 0)
M := M*I,
I := I - Degree
end.

View file

@ -0,0 +1 @@
multifactorial4(N,_D) = 1, N <= 0 => true.

View file

@ -0,0 +1 @@
multifactorial4(N,D) = N*multifactorial4(N-D,D).

View file

@ -0,0 +1,2 @@
multifactorial5(N,D) = M =>
N <= 0 -> M = 1 ; M = N*multifactorial4(N-D,D).

View file

@ -0,0 +1 @@
multifactorial6(N,D) = cond(N <= 0, 1, N*multifactorial6(N-D,D)).

View file

@ -0,0 +1,7 @@
import util.
go =>
foreach(D in 1..15)
println(D=[multifactorial(I,D) : I in 1..15])
end,
nl.

View file

@ -0,0 +1,30 @@
import cp.
%
% Reversible: find Degree and N given M
%
go2 =>
Ms = [4,20,105], % The multifactorials to identify
foreach(M in Ms)
println(m=M),
Degree :: 1..10, % limit of the degree
N :: 1..100, % limit of N
All = findall([N,Degree,M], (multifactorial_reversible(N,Degree,M),
solve([M,N,Degree]))),
foreach([NN,DD,MM] in All.sort)
printf("n=%d degree=%d m=%d\n",NN,DD,MM)
end,
nl
end,
nl.
% reversible variant (using CP)
multifactorial_reversible(N,_D,M) :-
N #<= 0, M #= 1.
multifactorial_reversible(N,D,M) :-
D #> 0,
N #> 0,
ND #= N-D,
multifactorial_reversible(ND,D,M1),
M #= N*M1.