Residue (Number theory)

Added number theoretic functions
* Chinese remainder
* Primitive root
* Primitive root list
You can avoid extra parentheses with `->` operator, i.e. use `x->as_mpz()` instead of `(*x).as_mpz()`