$f(z)=z^n+a_{n-1}z^{n-1}+\cdots+ a_0\in\mathbb Z[z]$ has all its roots on the unit circle. Prove that any root of $f(z)=0$ is a root of unity.

Suppose that $$f(z)=z^n+a_{n-1}z^{n-1}+\cdots+ a_0\in\mathbb Z[z]$$ has all its roots on the unit circle in the complex plane. Prove that any root of $$f(z)=0$$ is a root of unity.

This question has been asked before, yet it links to another MO post which proves a stronger result:

Let $$f$$ be a monic polynomial with integer coefficients in $$x$$. If all roots of $$f$$ have absolute value at most $$1$$, then $$f$$ is a product of cyclotomic polynomials and/or a power of $$x$$ (that is, all nonzero roots are roots of unity).

David E Speyer gave a short and relatively elementary proof. But other answers, and most likely the standard approaches, involve Galois theory.

So I am looking for other methods proving the statement which requires the roots lying on the unit circle without invoking Galois theory.

Thank you.

Consider a Frobenius matrix $$M \in \mathscr{M}_n(\mathbb{Z})$$ such that its characteristic polynomial is $$f$$.

Consider, for each $$n \geq 1$$, $$\chi_n$$ to be the characteristic polynomial of $$M^n$$. All the $$\chi_p$$ are monic with degree $$n$$.

Let us denote $$\omega_1, \ldots, \omega_n$$ the roots of $$\chi_1$$ with multiplicity.

By trigonalizing $$M$$ and taking its powers, $$\omega_1^k,\ldots,\omega_n^k$$ are the roots with multiplicity of $$\chi_k$$.

Thus all the $$\chi_p$$ have all their roots on the unit circle, which entails a uniform bound on their coefficients (the coefficient $$X^k$$ has modulus not exceeding $$\binom{n}{k}$$, by Vieta’s formulas).

Therefore, there exists $$n_1 < \ldots < n_{n+1}$$ such that the $$\chi_{n_k}$$ are the same.

In particular, for each $$n+1 \geq k > 1$$ there is $$1 \leq j_k \leq n$$ such that $$\omega_{j_k}^{n_k}$$.

If for some $$k$$, $$j_k=1$$, then $$\omega_1^{n_1}=\omega_1^{n_k}$$ ie $$\omega_1^{n_k-n_1}=1$$ and we are done.

Otherwise, by the pigeonhole principle, there are $$k < k’$$ such that $$j=j_k=j_{k’}$$, and $$\omega_1^{n_1}=\omega_j^{n_k}=\omega_j^{n_{k’}}$$, thus (as above) $$\omega_j$$ is a root of unity, thus $$\omega_j^{n_k}=\omega_1^{n_1}$$ also is one, thus so is $$\omega_1$$, and we are also done.