1 | initial version |
When you finish running G = Zmod(m).unit_group()
all the hard work is already done: a set of generators $g_i$ and their orders $n_i$ is computed, and elements are internally represented by the exponents of the generators. Exponentiation g^k
of an element g
in G
is internally just multiplying each exponent by k
and reducing modulo $n_i$. Only when you request the value of an element (for example, when printing) the generators, raised to the respective powers, are actually multiplied.
When $m=p$ the unit group is cyclic of order $p-1$, so there is just a single generator of order $p-1$.