Exponenciación binaria
La exponenciación binaria és un algoritme utilisat per a calcular de forma ràpida grans potencies sanceres d'un número dau. També és conegut com a potenciació per quadrats o elevar al quadrat i multiplicar. Implícitament utilisa l'expansió binaria de l'exponent. És d'us prou regular en aritmètica modular. Este algoritme és similar al de la duplicació en la multiplicació.
Versió recurrent
[editar | editar còdic]Fonaments
[editar | editar còdic]L'algoritme està basat en les següents tres propietats de la potència:
(1)
(2)
(3)
Usant i en l'equació () se seguix que . Prenent i en l'equació () s'obté que .
Algoritme
[editar | editar còdic]El següent algoritme recursivo calcula per a un natural dau:
Comparat en el método original de multiplicar per sí mateix voltes, este algoritme només utilisa O(log n) multiplicacions i accelera el càlcul de tremendament; més o menys de la mateixa forma que l'algoritme de la multiplicació accelera una multiplicació sobre el método més llent de realisar una suma repetida.
Aplicacions
[editar | editar còdic]La mateixa idea permet el càlcul ràpit de potències molt grans en mòdul. Especialment en criptografia, és útil calcular potències en l'anell dels sancers mòdul q.
L'idea pot ser usada també per a computar potències d'número entero en un semigrupo, usant la regla
- Potència(x, -n) = (Potència(x, n))-1.
Este método funciona en qualsevol semigrupo, i és usat freqüentment per a calcular potències de matrius.
Per eixemple, l'evaluació de
- 13789722341 (mod 2345)
prendria molt temps i espai d'almagasenament si el método ingenu és usat: calcular 13789722341 i prendre el residu quan és dividit per 2345. Inclús usant un método més efectiu prendrà temps considerable: elevar 13789 al quadrat , prendre el residu quan es dividix per 2345, multiplicar el resultat per 13789, i aixina successivament. Este procés realisarà 722340 multplicaciones modular. Este algoritme està basat en l'observació que 13789722341 = 13789(137892)361170. Llavors, si es calcula 137892, el càlcul complet prendria 361170 multiplicacions modular. Esta és un guany en un factor de dos. Pero com el nou problema seguix sent similar a l'anterior, es pot aplicar l'observació novament, reduint a la mitat la cantitat, aproximadament.
L'aplicació successiva d'este algoritme és equivalent a descompondre l'exponent (convertint-ho a base binaria) en una seqüència de quadrats i multiplicacions: per eixemple
- x13 = x1101bin
- = x(1*2^3 + 1*2^2 + 0*2^1 + 1*2^0)
- = x1*2^3 * x1*2^2 * x0*2^1 * x1*2^0
- = x2^3 * x2^2 * 1 * x2^0
- = x8 * x4 * x1
- = (x4)2 * (x2)2 * x
- = (x4 * x2)2 * x
- = ((x2)2 * x2)2 * x
- = ((x2 * x)2)2 * x → algoritme necessita només 5 multiplicacions en lloc de 13 - 1 = 12
Alguns eixemples més:
- x10 = ((x2)2*x)2 perque 10 = (1,010)2 = 23+21, algoritme necessita 4 multiplicacions en lloc de
9 * x100 = (((((x2*x)2)2)2*x)2)2 perque 100 = (1,100,100)2 = 26+25+22, algoritme necessita 8 multiplicacions en lloc de 99
- x1,000 = ((((((((x2*x)2*x)2*x)2*x)2)2*x)2)2)2 perque 103 = (1,111,101,000)2, algoritme necessita 14 multiplicacions en lloc de 999
- x1,000,000 = ((((((((((((((((((x2*x)2*x)2*x)2)2*x)2)2)2)2)2*x)2)2)2*x)2)2)2)2)2)2 perque 106 = (11,110,100,001,001,000,000)2, algoritme necessita 25 multiplicacions
- x1,000,000,000 = ((((((((((((((((((((((((((((x2*x)2*x)2)2*x)2*x)2*x)2)2)2*x)2*x)2)2*x)2)2*x)2*x)2)2)2*x)2)2*x)2)2)2)2)2)2)2)2)2 perque 109 = (111,011,100,110,101,100,101,000,000,000)2, algoritme necessita 41 multiplicacions
Vore també
[editar | editar còdic]
- Este artícul conté una traducció derivada de «Exponenciación binaria» de Wikipedia en castellà publicada baix la Llicència de documentació lliure de GNU i la Llicència Creative Commons Reconeiximent-CompartirIgual 4.0 Internacional.