Source: https://www.math.uwaterloo.ca/~x46wang/Weekly/Lesson8_NumberTheorySoln.pdf