Source: https://www.seas.gwu.edu/~poorvi/Classes/CS2312/ModularArithmetic.pdf