Function: znprimroot
Section: number_theoretical
C-Name: znprimroot
Prototype: G
Help: znprimroot(n): returns a primitive root of n when it exists.
Doc: returns a primitive root (generator) of $(\Z/n\Z)^*$, whenever this
 latter group is cyclic ($n = 4$ or $n = 2p^k$ or $n = p^k$, where $p$ is an
 odd prime and $k \geq 0$). If the group is not cyclic, the function will raise an
 exception. If $n$ is a prime power, then the smallest positive primitive
 root is returned. This may not be true for $n = 2p^k$, $p$ odd.

 Note that this function requires factoring $p-1$ for $p$ as above,
 in order to determine the exact order of elements in
 $(\Z/n\Z)^*$: this is likely to be costly if $p$ is large.
