Briefly: the answer is $120$. One such matrix is
$$
A =
\pmatrix{0&1\\& \ddots & \ddots \\
\\
\\
\\
\\
\\
\\
&&&&&&&\ddots & \ddots
\\
&&&&&&&&0&1
\\-1&-2 & -3 & -3 & -4 & -4 & -4 & -3 & -3 & -2}.
$$
Here is an approach to the problem.
The matrix $A$ will satisfy $A^n = I$ if and only if the minimal polynomial of $A$ divides $x^n - 1$. Notably, $x^n - 1$ is a product of cyclotomic polynomials (which are irreducible over $\Bbb Q$), so the minimal polynomial of $A$ must be a product of these. Because $A$ has size $10$, its minimal polynomial has degree at most $10$.
Let $\Phi_n$ denote the $n$th cyclotomic polynomial. The degree of $\Phi_n$ is $\phi(n)$ (where $\phi$ denotes the Euler totient function). For a product $p = \Phi_{n_1} \cdots \Phi_{n_k}$ with $n_1,\dots,n_k$ distinct, the smallest $n$ for which $x^n - 1$ is divisible by $p$ will be $n = \mathrm{lcm}(n_1,\dots,n_k)$.
Putting all that together, we can frame the problem as follows:
Maximize $\mathrm{lcm}(n_1,\dots,n_k)$ over all sets of distinct positive integers $n_1,\dots,n_k$ satisfying the constraint that $\phi(n_1) + \cdots + \phi(n_k) \leq 10$.
This maximal gcd will be equal to the largest possible finite order of an element of $GL_{10}(\Bbb Q)$.
Notably, there are lower bounds on $\phi$ that make it possible to obtain a solution by brute force. In particular, it is known that $\phi(n) \geq \sqrt{n/2}$. Thus, each $n_k$ must satisfy
$$
\sqrt{n_k/2} \leq \phi(n_k) \leq 10 \implies n_k \leq 200.
$$
After a systematic search I have found that the highest possible order is $120$. This maximum is attained with a matrix whose minimal polynomial is equal to
$$
\Phi_3\Phi_5\Phi_8 = (x^2 + x + 1)(x^4 + x^3 + x^2 + x + 1)(x^4 + 1).
$$
For instance, we can take $A$ to be the associated companion matrix.
Here's the Python code I used to compute this answer:
from math import gcd
def gcds(args):
if len(args) == 2:
return gcd(args)
else:
return gcds(gcd(args[:2]),args[2:])
def lcm(args):
if len(args) == 1:
return args[0]
if len(args) == 2:
return args[0]args[1]//gcd(args)
else:
return lcm(lcm(args[:2]),*args[2:])
def Ephi(n):
s = 0
for k in range(n):
if gcd(k,n) == 1:
s += 1
return s
def get_list(deg, start = 1, M = 200):
if deg == 0:
return [[]]
arr = []
for k in range(start,M+1):
phi = Ephi(k)
if phi <= deg:
new_deg = deg - phi
new_M = 2new_deg*2
arr += [[k] + L for L in get_list(new_deg, start = k+1, M = new_M)] # start=k allows repeats
return arr
if name == 'main':
n = 10 # set value of n (in GL(n,Q)) here
M = 2*n**2
arr = get_list(n, M=M)
print(' number of non-derogatory elements with finite order (up to iso): ' + str(len(arr)))
m = 0
for L in arr:
x = lcm(*L)
if x > m:
m = x
mL = L
print(' max order: %d'%m) #prints maximal order
s = ''
for k in mL:
s += 'Phi_%d '%k
# minimal polynomial of element with maximal order as product of
# cyclotomic polynomials
print('minimal polynomial of maximal element: ' + s)
There are a few other candidates for the minimal polynomial. All together, the valid possibilies are
$$
\Phi_3\Phi_5\Phi_8,\\
\Phi_3\Phi_8\Phi_{10},\\
\Phi_5\Phi_6\Phi_8,\\
\Phi_6\Phi_8\Phi_{10}.
$$
Relevant paper: Finite Groups of Matrices Whose Entries Are Integers