Shoup V. A Computational Introduction to Number Theory and Algebra 2ed 2005