Skip to main content
\( \newcommand{\lt}{ < } \newcommand{\gt}{ > } \newcommand{\amp}{ & } \)

Section10.2A Better Way to Primitive Roots

Subsection10.2.1A useful lemma

In order to find primitive roots, we might want a better approach than simply trying every single power of \(a\) for every \(a\) until we find one.

Example10.2.1A motivating example

Let's walk through an example to motivate a new approach, using a small modulus.

Take some number \(n\) with a \(\phi(n)\) with a few factors. Say, \(n=11\) and \(\phi(11)=10\). Okay, we know that every element \(a\in U_{11}\) will have \begin{equation*}a^{10}\equiv 1\text{ (mod }11)\; ,\end{equation*} but which elements don't reach the unit before the tenth power?

Well, we know that the order of an element has to divide \(\phi(11)=10\), so we could try \(a^{2}\) and \(a^5\); no other \(a^k\) could yield 1. In fact, if those aren't \(\equiv 1\), there aren't any other possible orders out there, so that \(a\) would work as a primitive root.

  • Let's try this with \(a=2\). \begin{equation*}2^2\equiv 4\not\equiv 1\text{ (mod }11)\text{ and }2^5=32\equiv -1\not\equiv 1\text{ (mod }11)\;, \end{equation*} so \(2\) must be a primitive root.

  • What about with \(a=3\)? \begin{equation*}3^5=9\cdot 9\cdot 3\equiv (-2)^2\cdot 3\equiv 12\equiv 1\text{ (mod }11)\end{equation*} so \(3\) is not a primitive root modulo eleven.

The moral is that we didn't have to check all ten possible powers to decide whether \(a\) was a primitive root modulo eleven.

Now we formalize this, and in fact rephrase it in a slightly more efficient way.

Sage note10.2.2How Sage does primitive roots

As far as I understand the code, this is how even Sage tests for finding primitive roots.

This proof is a little terse, so let's unpack this test. Essentially, we change two things from the initial idea of trying all divisors of \(\phi(n)\):

  • Instead of trying powers which are divisors of \(\phi(n)\), we try powers which are \(\phi(n)\) divided by divisors. So \(2^5\) becomes \(2^{10/2}\) and \(3^2\) becomes \(3^{10/5}\). That seems like it's not doing anything other than rewriting, but at least it organizes things differently.

  • Then, instead of having to try all \(\phi(n)/d\), we use a trick to just need prime divisors \(d\). (See the proof.)

Doing some examples slowly will help it make sense.

Subsection10.2.2Using the test lemma

If you try various \(n\) and various attempts at primitive roots \(a\), you will see that this really works. Make sure you are trying \(a\) that are actually coprime to \(n\), though! As it turns out, there aren't very many things to try, since \(\phi(n)\) in general doesn't have a lot of prime divisors, even if \(n\) is a fairly large prime.

Why not try it by hand for \(n=17\)? There is only one prime divisor of \(\phi(17)\), which makes things easier. Fill in this table, where PR means primitive root.

\(a\) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
PR? No No

This lemma also makes easy some statements that would otherwise be quite hard. For instance, you should (Exercise 10.6.2) see how to use the test lemma to prove that if \(a\) is a primitive root of \(n\), then so is \(a^{-1}\) (modulo \(n\)).

Here's something harder, to show the power of this approach.