See the Wikipedia article on modular exponentiation. Basically, when you do a**d % n
, you actually have to calculate a**d
, which could be quite large. But there are ways of computing a**d % n
without having to compute a**d
itself, and that is what pow
does. The **
operator can’t do this because it can’t “see into the future” to know that you are going to immediately take the modulus.