In the past decade, there have been important applications of number theory to network communications and computation complexity through explicit constructions of the so-called Ramanujan graphs. The purpose of this book is to explain in detail the material in number theory involved in the above applications, with the ultimate goal of giving the explicit constructions. In fact, this simple-minded goal serves as the guideline of the selection and the exposition of the material in this book. Written in semi-formal style, tt is meant for advanced undergraduate students, graduate students and people interested in number theory and its applications.