login
A211214
Number of reduced Latin n-dimensional hypercubes of order 4; labeled n-ary loops of order 4 with fixed identity.
2
1, 1, 4, 64, 7132, 201538000, 432345572694417712, 3987683987354747642922773353963277968, 678469272874899582559986240285280710364867063489779510427038722229750276832
OFFSET
0,3
COMMENTS
The values are calculated recursively, based on the characterization by 2009. The number a(5) was found before (2001 and, independently, later works) by exhaustive computer-aided classification of the objects.
REFERENCES
T. Ito, Creation Method of Table, Creation Apparatus, Creation Program and Program Storage Medium, U.S. Patent application 20040243621, Dec. 2, 2004.
D. S. Krotov, V. N. Potapov, On the reconstruction of N-quasigroups of order 4 and the upper bounds on their numbers, Proc. Conference devoted to the 90th anniversary of Alexei A. Lyapunov (Novosibirsk, Russia, October 8-11, 2001), 2001, http://www.ict.nsc.ru/ws/Lyap2001/2363/
B. D. McKay, I. M. Wanless, A census of small latin hypercubes, SIAM J. Discrete Math. 22:2 (2008) 719-736.
LINKS
D. S. Krotov, V. N. Potapov, n-Ary Quasigroups of Order 4, SIAM J. Discrete Math. 23:2 (2009), 561-570, arXiv: math/0701519.
V. N. Potapov, D. S. Krotov, On the number of n-ary quasigroups of finite order, Discrete Mathematics and Applications, 21:5-6 (2011), 575-586, arXiv:0912.5453.
FORMULA
a(n) = A211215(n)/(4*6^n).
PROG
# (Python)
N=12 # the maximum arity to calculate
J, K=[[[[]]]], [[[[]]]]
for n in range(1, N+1):
.J+=[[[]]] # create empty J[n][0]
.K+=[[[]]] # create empty K[n][0]
.for i in range(1, n):
..J[n]+=[[]] # create empty J[n][i]
..K[n]+=[[]] # create empty K[n][i]
..if (i<=n-i):
...J[n][i] += J[n-i][i][:]
...K[n][i] += map(lambda K_: [K_[0]+1]+K_[1:], K[n-i][i])
..for j in range(i+1, n-i+1):
...J[n][i] += map(lambda J_: [i]+J_, J[n-i][j])
...K[n][i] += map(lambda K_: [1]+K_, K[n-i][j])
.J[n]+=[[[n]]] # create J[n][n]
.K[n]+=[[[1]]] # create K[n][n]
J = map(lambda Ji:sum(Ji, []), J); K = map(lambda Ji:sum(Ji, []), K) # merge groups
# now J[n] and K[n] represent a list of partitions of n into positive summands:
# n=J[n][i][0]*K[n][i][0]+J[n][i][1]*K[n][i][1]+J[n][i][2]*K[n][i][2]+...
# 0<J[n][i][0]<J[n][i][1]<J[n][i][2]<... -- summands; K[n][i][j]>0 -- multiplicities
map(lambda Ji:Ji.pop(), J); map(lambda Ki:Ki.pop(), K) # remove the trivial 1-partitions
#
import math
F=map(lambda J1, K1, n:map(lambda J2, K2: reduce(lambda res, JK: res/JK, map(lambda J3, K3:math.factorial(K3)*math.factorial(J3)**K3, J2, K2), math.factorial(n)), J1, K1), J, K, range(N+1))
# F[n][i] is the number of partitions of an n-set that correspond to the partition J[n][i], K[n][i] of n.
La=map(lambda n:2L**(2**n-n-1), range(N+1))
Ras, Ra0, R_0, R_s, P_a, V, T = [0, 0L], [0, 0L], [0, 0L], [0, 0L], [0, 0L], [1, 1L], [4, 24L]
for n in range(2, N+1):
.V+=[0L]; T+=[0L]; P_a+=[0L]; Ras+=[0L]; Ra0+=[0L]; R_0+=[0L]; R_s+=[0L]
.for i in range(len(K[n])):
..R_0[n], Ra0[n], R_s[n], Ras[n] = map(lambda A, B, C :
...A[n] + reduce(lambda r, t:r*(B[J[n][i][t]]-C*A[J[n][i][t]])**K[n][i][t], range(len(K[n][i])), ((1-C)*P_a[sum(K[n][i])]+C)*F[n][i]),
...(R_0, Ra0, R_s, Ras), (V, La, V, La), (0, 0, 1, 1))
.R_0[n] *= 3
.P_a[n] = La[n] - Ra0[n] - 2*Ras[n]
.V[n] = 3*P_a[n] + R_0[n] + 4*R_s[n]
.T[n] = 4*(6**n)*V[n]
print "\n Reduced (A211214):", V
print "\n Total (A211215):", T
CROSSREFS
KEYWORD
nonn
AUTHOR
Denis S. Krotov and Vladimir N. Potapov, Apr 06 2012
STATUS
approved