Este algoritmo es una combinación del Exponencia por cuadros algoritmo y aritmética de módulo.
Para entender lo que está pasando, primero considere una situación en la que exponent
es un poder de 2
. Entonces, suponiendo que exponent = 2 ^ k
, el resultado podría calcularse cuadrando el resultado k
veces, es decir
res = (...((base ^ 2) ^2 ) ... ) ^2))
---------------------
k times
Cuando exponent
no es un poder de 2
, necesitamos hacer multiplicaciones adicionales. Resulta que si podemos dividir exponent
A los 2 sin resto, podemos cuadrar la base y dividir el exponente. Sin embargo, si hay un resto, también debemos multiplicar el resultado intermedio por el valor de la corriente base
.
Lo que ve es la misma exponencia al cuadrar la aplicada a la multiplicación de módulos. El algoritmo denota división entera por dos utilizando el exponent >> 1
operación, que es idéntica a floor(exponent / 2)
.