OFFSET
1,5
COMMENTS
Length of row n is A370164(n).
REFERENCES
Martin Aigner, Markov's theorem and 100 years of the uniqueness conjecture. A mathematical journey from irrational numbers to perfect matchings. Springer, 2013. x+257 pp. ISBN: 978-3-319-00887-5; 978-3-319-00888-2 MR3098784.
LINKS
Martin Aigner, Markov's theorem and 100 years of the uniqueness conjecture. A mathematical journey from irrational numbers to perfect matchings, [archive.org copy of the book].
EXAMPLE
The first rows are:
n
1: 0
2: 0 1
3: 1 2
4: 1 2
5: 0 1 2 3 4
6: 1 2 4 5
7: 1 2 5 6
8: 1 2 5
9: 1 2 4 5 7 8
10: 0 1 2 3 4 5 6 7 8 9
11: 1 2 4 5 6 7 9 10
12: 1 2 5 10
13: 0 1 2 3 4 5 6 7 8 9 10 11 12
14: 1 2 5 6 8 9 12 13
15: 1 2 4 5 7 8 10 11 13 14
16: 1 2 5 9 13
17: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
18: 1 2 4 5 7 8 10 11 13 14 16 17
19: 1 2 3 4 5 6 8 9 10 11 13 14 15 16 17 18
20: 1 2 5 6 9 10 13 14 17 18
For n = 14 residues congruent to 0, 3, or 4 mod 7 are forbidden. (See comments to A370164 for explanation.) All other residues occur. For example, the Markov numbers 1, 2, 5, 34, 610, 1325, 194, and 13 produce the residues shown in row 14 of the triangle (mod 14).
PROG
(SageMath)
def generateAllMarkovTreeResidues(n):
row = [[1 % n, 5 % n, 2 % n]]
residuesFound = []
triplesFound = []
while row != []:
newRow = []
for trpl in row:
if trpl[1] not in residuesFound:
residuesFound.append(trpl[1])
if trpl[2] < trpl[0]:
trpl.reverse()
if trpl not in triplesFound:
triplesFound.append(trpl)
newRow.append([trpl[0], (3*trpl[0]*trpl[1]-trpl[2]) % n, trpl[1]])
newRow.append([trpl[1], (3*trpl[1]*trpl[2]-trpl[0]) % n, trpl[2]])
row = newRow
residuesFound.sort()
return(residuesFound)
[r for n in range(1, 16) for r in generateAllMarkovTreeResidues(n)]
CROSSREFS
KEYWORD
nonn,tabf
AUTHOR
Wouter Meeussen and William P. Orrick, Mar 03 2024
STATUS
approved