Review of "A Computational Introduction to Number Theory and Algebra by Victor Shoup", Cambridge University Press, 2005

Increasingly, number theory and algebra have become useful tools for the well-rounded computer scientist. Historically, of course, number theory and algebra have been indispensable for cryptography, and finite fields (and, to a more limited extent, other algebraic structures) have been widely used in coding theory. More recently, though, these topics have begun to permeate other areas of theoretical computer science: finite fields and errorcorrecting codes are now pervasive in complexity theory; quantum computing relies heavily on abstract algebra (especially linear algebra) and coding theory; and, somewhat surprisingly, there have been recent explicit constructions of combinatorial objects such as extractors which rely on deep results from number theory. While there are numerous textbooks covering number theory, abstract algebra, and/or the basics of finite fields, there have not been many introductory-level books to approach the subject matter from a “computer science” perspective. A typical algebra textbook, for example, is more interested in proving that a certain function is well-defined or that a certain algebraic structure exists than in examining the efficiency of evaluating a particular function or concrete algorithms for generating certain objects. And certainly few books on number theory go beyond the most basic applications (if any applications are presented at all). That is not to say that there are no advanced books treating these topics; there certainly are. But the student looking for an introduction to these areas has traditionally had to learn about them from the mathematicians’ perspective. Victor Shoup, a cryptographer and computational number theorist, has changed that with his publication of A Computational Introduction to Number Theory and Algebra. This is an outstanding and well-written book whose aim is to introduce the reader to a broad range of material — ranging from basic to relatively advanced — without requiring any prior knowledge on the part of the reader other than calculus and mathematical maturity. That the book succeeds at this goal is quite an accomplishment! Besides focusing on the computational aspects of number theory and algebra — e.g., presenting algorithms for various tasks and analyzing their complexity — the book emphasizes important applications of the mathematics developed. Indeed, the stated purpose of the book is to cover enough mathematics to understand the applications while covering some additional material to whet the reader’s appetite; as stated in the preface, the author has: