|
|
A268754
|
|
The period of an n X 1 rectangular oscillator in the B1/S Life-like cellular automaton.
|
|
3
|
|
|
1, 2, 1, 6, 4, 14, 1, 14, 12, 62, 8, 126, 28, 30, 1, 30, 28, 1022, 24, 126, 124, 4094, 16, 2046, 252, 1022, 56, 32766, 60, 62, 1, 62, 60, 8190, 56, 174762, 2044, 8190, 48, 2046, 252, 254, 248, 8190, 8188, 16777214, 32, 4194302, 4092, 510, 504, 134217726, 2044, 2097150
(list;
graph;
refs;
listen;
history;
text;
internal format)
|
|
|
OFFSET
|
1,2
|
|
COMMENTS
|
The seed in each case is a single live cell at the left end.
Terms of the form 2^k-1 have a period of 1 since all cells die.
In binary, all terms (except the 1's) have at least one 1 followed by at least one 0. The exceptions are the 36th and 94th terms and their derivatives, which have alternating 1's and 0's in their binary expansion.
|
|
LINKS
|
|
|
FORMULA
|
No general formula for even-indexed terms is known. For odd-indexed terms, a(2n+1) = 2*a(n), except when n is of the form (2^k - 1), in which case a(n) = 1.
|
|
EXAMPLE
|
a(10) = 62 because a strip of 10 cells has period 62 in this rule.
|
|
MATHEMATICA
|
g = Function[{sq, p}, Module[{l = Length[sq]},
Do[If[sq[[i]] == sq[[j]], Return[p^(j - 1) - p^(i - 1)]],
{j, 2, l}, {i, 1, j - 1}]]];
MPM = Algebra`MatrixPowerMod;
EventualPeriod = Function[{m, v, p},
Module[{n = Length[m], w, sq, k, primes},
sq = NestList[(MPM[#, p, p]) &, m, n];
w = Mod[Last[sq].v, p];
sq = Map[(Mod[#.w, p]) &, sq];
k = g[sq, p];
If[k == Null, k = p^n Apply[LCM, Table[p^r - 1, {r, 1, n}]]];
primes = Map[First, FactorInteger[k]];
primes = Select[primes, (# > 1) &];
While[Length[primes] > 0,
primes = Select[primes, (Mod[k, #] == 0) &];
primes = Select[primes, (Mod[MPM[m, k/#, p].w, p] == w) &];
k = k/Fold[Times, 1, primes];
]; k ]];
mat = Function[{n}, Table[Boole[Abs[i - j] == 1], {i, 1, n}, {j, 1, n}]];
vec = Function[{n}, Table[Boole[i == 1], {i, 1, n}]];
Table[EventualPeriod[mat[n], vec[n], 2], {n, 1, 100}]
|
|
PROG
|
(Python)
def electron_period(n):
wire_mask = (1 << n) - 1
power = lam = 1
tortoise, hare = 1, 2
while tortoise != hare:
if power == lam:
tortoise = hare
power *= 2
lam = 0
hare = ((hare << 1) ^ (hare >> 1)) & wire_mask
lam += 1
return lam
|
|
CROSSREFS
|
|
|
KEYWORD
|
nonn
|
|
AUTHOR
|
|
|
STATUS
|
approved
|
|
|
|