Questo algoritmo è una combinazione del Esponenziale da quadrati algoritmo e aritmetica del modulo.
Per capire cosa sta succedendo, prima considera una situazione quando exponent
è un potere di 2
. Quindi, assumendolo exponent = 2 ^ k
, il risultato potrebbe essere calcolato quadrando il risultato k
volte, cioè
res = (...((base ^ 2) ^2 ) ... ) ^2))
---------------------
k times
quando exponent
non è un potere di 2
, dobbiamo fare ulteriori moltiplicazioni. Si scopre che se possiamo dividere exponent
Entro 2 senza resto, possiamo quadrarsi della base e dividere l'esponente. Se, tuttavia, c'è un resto, dobbiamo inoltre moltiplicare il risultato intermedio per il valore della corrente base
.
Quello che vedi è la stessa esponenziale quadrata applicata alla moltiplicazione del modulo. L'algoritmo indica la divisione interi di due usando il exponent >> 1
operazione, che è identica a floor(exponent / 2)
.