Find a number which generates all the integers mod q
Pyth, 16 15 bytes
f-1m.^T/tQdQPtQ
If p is the input, we know that g^(p-1) = 1 mod p, so we just need to check that g^a != 1 mod p for any smaller a. But a must be a factor of p-1 for that to be possible, and any multiple of an a with that property will also have that property, so we only need to check that g^((p-1)/q) != 1 mod p for all prime factors q of p-1. So, we check all integers g in increasing order until we find one that works.
Explanation:
f-1m.^T/tQdQPtQ
f Return the first value T such that the following is truthy:
PtQ Take the prime factorization of the input - 1.
m Map those prime factors to
/tQd Take the input - 1 divided by the factor
.^T Q Raise T to that exponent mod input,
performed as modular exponentiation, for performance.
-1 Check that 1 is not found among the results.
Mathematica, 52 bytes
Inspired by isaacg's answer.
1//.i_/;PowerMod[i,Divisors[#-1],#]~Count~1!=1:>i+1&