login
A397019
Number of free polyominoes with 4n cells that can be tiled by n copies of the I-tetromino (the 1 X 4 bar); equivalently, the number of n-fold multiples of the I-tetromino, counted up to rotation and reflection.
7
1, 7, 93, 1973, 47161, 1204744, 31711028, 852689953
OFFSET
1,2
COMMENTS
In the divisibility language of Polyomino Number Theory (Cibulis, Liu, and Wainwright), a polyomino that can be assembled from n copies of a polyomino P is an n-fold multiple of P. This sequence counts the distinct free n-fold multiples of the I-tetromino. The pieces may be placed in any of their orientations; copies must meet edge to edge and may not overlap.
LINKS
A. Cibulis, A. Liu, and B. Wainwright, Polyomino Number Theory I, Crux Mathematicorum 28(3) (2002), 147-150.
Solomon W. Golomb, Normed Division Domains, The American Mathematical Monthly, Vol. 88, No. 9 (Nov., 1981), pp. 680-686.
EXAMPLE
a(1) = 1 (the bar itself).
a(2) = 7: two 1 X 4 bars joined edge to edge form 7 distinct free octominoes (the 2 X 4 rectangle, the 1 X 8 bar, and five offset arrangements).
PROG
(Python)
def _norm(s):
mx = min(x for x, y in s); my = min(y for x, y in s)
return frozenset((x - mx, y - my) for x, y in s)
def _orients(s):
out = set(); c = _norm(s)
for _ in range(4):
out.add(c)
out.add(_norm(frozenset((-x, y) for x, y in c)))
c = _norm(frozenset((-y, x) for x, y in c))
return out
def _canon(s):
return min(tuple(sorted(o)) for o in _orients(s))
def a(n, piece=frozenset({(0, 0), (1, 0), (2, 0), (3, 0)})):
states = {frozenset(_canon(list(_orients(piece))[0]))}
O = list(_orients(piece))
for _ in range(n - 1):
nxt = set()
for st in states:
xs = [x for x, y in st]; ys = [y for x, y in st]
for o in O:
ox = [p[0] for p in o]; oy = [p[1] for p in o]
for dx in range(min(xs)-max(ox)-1, max(xs)-min(ox)+2):
for dy in range(min(ys)-max(oy)-1, max(ys)-min(oy)+2):
t = frozenset((p[0]+dx, p[1]+dy) for p in o)
if t & st: continue
if any((x+1, y) in st or (x-1, y) in st or (x, y+1) in st or (x, y-1) in st for x, y in t):
nxt.add(st | t)
states = {frozenset(k) for k in {_canon(s) for s in nxt}}
return len(states)
print([a(n) for n in range(1, 6)]) # 1, 7, 93, 1973, 47161
# larger terms by the parallel hash-sharded on-disk method. Haoyang Xu
CROSSREFS
Cf. A390620 (O-column, free polynars), A000105 (free polyominoes); A397020 (T), A397021 (L), A397022 (S), A397023 (A390620 - A000105).
Sequence in context: A370939 A318697 A337457 * A346463 A346464 A197484
KEYWORD
nonn,more,hard
AUTHOR
Haoyang Xu, Jun 13 2026
STATUS
approved