Wow. This deserves a separate answer. As I mentioned in a comment, motivated by the question, in a previous comment, by [Igor Rivin](https://mathoverflow.net/users/11142/igor-rivin) whether an efficient primality test can be made if the statement in the question is true, I asked a separate question about whether one could efficiently compute $T_n(x)$ modulo $x^r-1,n$. That question got a [brilliant answer](https://mathoverflow.net/a/286639/41291) by [Lucia](https://mathoverflow.net/users/38624/lucia), which enables to really demonstrate that if the statement in the question is true, one indeed obtains a very efficient primality test based on it. I made this quick-and-dirty Mathematica code polmul[f_, g_, r_, n_] := Mod[Table[f.g[[Mod[k - Range[r] + 1, r, 1]]], {k, r}], n] matmul[a_, b_, r_, n_] := Mod[ {{polmul[a[[1, 1]], b[[1, 1]], r, n] + polmul[a[[1, 2]], b[[2, 1]], r, n], polmul[a[[1, 1]], b[[1, 2]], r, n] + polmul[a[[1, 2]], b[[2, 2]], r, n]}, {polmul[a[[2, 1]], b[[1, 1]], r, n] + polmul[a[[2, 2]], b[[2, 1]], r, n], polmul[a[[2, 1]], b[[1, 2]], r, n] + polmul[a[[2, 2]], b[[2, 2]], r, n]}} , n] matsq[a_, r_, n_] := matmul[a, a, r, n] matpow[a_, k_, r_, n_] := If[k == 1, a, If[EvenQ[k], matpow[matsq[a, r, n], k/2, r, n], matmul[a, matpow[matsq[a, r, n], (k - 1)/2, r, n], r, n] ] ] xmat[r_, n_] := {{PadRight[{0, 2}, r], PadRight[{n - 1}, r]}, {PadRight[{1}, r], ConstantArray[0, r]}} isprime[n_] := With[{r = smallestr[n]}, If[r == 0, False, With[{xp = matpow[xmat[r, n], n - 1, r, n]}, Mod[RotateRight[xp[[1, 1]]] + xp[[1, 2]], n] === PadRight[Append[ConstantArray[0, Mod[n, r]], 1], r] ] ] ] where `smallestr` is as in my other answer. Running this on $n$ up to 100000 (all answers correct) gives the following timing: [![enter image description here][1]][1] Seems that it is of at worst logarithmic order (as that answer by Lucia suggests) - actually the graph of $\log(\operatorname{time}(n))/\log\log(n)$ looks almost like going to be bounded above: [![enter image description here][2]][2] Since the algorithm involves a recursive procedure for matrix powers, in principle one also has to check memory use. Here I must confess results are strange, maybe it is something hardware-specific. $$ \begin{array}{r|l} \text{amount of memory}&\text{number of cases (out of 100000)}\\ \hline 32&1407\\ 64&94408\\ 80&1\\ 288&1\\ 320&42\\ 352&3\\ 392&8\\ 424&2316\\ 456&1812\\ 3452552&1 \end{array} $$ This last amount 3452552 corresponds to $n=65969$, I have no idea why it needed so much memory. As I said this might be something machine specific - maybe some garbage collection occurred at that point or something like that. Anyway, as opposed to memory measurement timing data seem to be very accurate, I used the Mathematica command `AbsoluteTiming` and documentation says it gives actual processor time used for the calculation with quite high precision. [1]: https://i.sstatic.net/y5rdZ.png [2]: https://i.sstatic.net/sBoL2.png