miércoles, 20 de febrero de 2013

Un poco de cálculos matemáticos...


 El tema es obviamente matemáticas, claro, y en este caso particular se trata de la descripción de métodos aritméticos raros para realizar operaciones tan comunes como elevar un número de 4 cifras a la octava potencia o calcular el logaritmo de un número entero, aunque casi todos son simplemente métodos para multiplicar. Todos los algoritmos aquí expuestos calculan con exactitud el resultado, salvo el de los logaritmos, que sólo realiza una burda aproximación. 
Muchos de ellos son bastante simples, de modo que podré explicar el fundamento de todos ellos sin extenderme demasiado. Y no puedo terminar la introducción sin mencionar una simple pero profusa enciclopedia de matemáticas llamada Matemáticas para Todos, de la que he sacado buena parte de estos métodos, y con la que empecé a aprender matemáticas por mi cuenta cuando tenía unos 5 ó 6 años.
Quiero dejar claro otro detalle: mucha gente piensa que tengo rapidez mental para los cálculos, lo que no es cierto, o al menos no en la medida en que me lo dicen.
 Una frase célebre dicta que "los grandes matemáticos nunca fueron grandes calculadores", lo que no es cierto en general pero sí en la mayoría de los casos.
 Pues bien, yo estoy mucho más cerca de ser un buen matemático que de ser un buen calculador, 
aunque para mi desgracia cualquiera de esos dos calificativos me viene muy grande.
 Lo que voy a exponer es básicamente una colección de trucos matemáticos, algunos más rápidos y útiles que otros, para agilizar los cálculos. No están todos los trucos que uso, porque para eso me haría falta llenar mucho espacio, pero sí los más genéricos. No tienen mucho interés para el humano medio, pero sí para cualquier aficionado a los números.

Algoritmo egipcio de multiplicación
Empiezo por el que es probablemente el algoritmo más antiguo de todos los expuestos.
 Es un procedimiento para multiplicar entre sí dos números, y bastante tosco aunque algo ingenioso. 
El algoritmo utiliza implícitamente la codificación en base 2 de uno de los números para calcular el resultado mediante una serie de sumas. Resulta gratificante comprobar una vez más lo avanzada que era la civilización egipcia para su tiempo (no por nada decían en el planeta Osiris 4 que los todopoderosos egipcios les habían enseñado todo cuanto sabían): este algoritmo no sólo no se parece al algoritmo clásico para multiplicar, sino que además demuestra rudimentos de base 2, todo un logro en una época en la que los sistemas de numeración posicionales eran algo demasiado ignoto como para ser considerados siquiera como ciencia ficción 
(los sistemas de numeración eran aditivos, como el romano).
Para multiplicar dos números A y B, el procedimiento es el siguiente: vamos a escribir dos columnas de números. En la primera fila escribimos respectivamente los números 1 y B; en la segunda fila escribimos 
2 y 2*B; en la tercera, 4 y 4*B... y así sucesivamente, multiplicando por dos los elementos de cada fila hasta que el elemento de la primera columna sea mayor que A/2. 
Por ejemplo, para multiplicar 74*37 escribiríamos algo como esto:
137
274
4148
8296
16592
321184
642368
Una vez completada esta fase inicial, el procedimiento a seguir consiste en expresar el número A como suma de uno o más valores de la primera columna (sumando como mucho una vez cada número).
 Esta descomposición es única ya que se corresponde con la representación en binario de A, y en este caso la suma es 64+8+2 (correspondiente al número binario 1001010). Pues ahora cogemos los números de la segunda columna correspondientes a estos valores, y los sumamos. 
En este caso, 74+296+2368=2738, que efectivamente es 74*37, como todo el mundo sabe.
 Nótese que, aunque yo no lo he hecho así, este algoritmo es más rápido si a la hora de realizar un producto tomamos el número más pequeño como candidato a A, y el mayor como B, ya que el número de multiplicaciones (y probablemente de sumandos finales) es menor.

¿Cómo funciona este método? 
Este algoritmo se aprovecha de dos propiedades: la existencia y unicidad de la representación binaria de cada número, que permite garantizar la existencia de una y sólo una suma posible, y la propiedad distributiva del producto con respecto de la suma, que garantiza que el resultado es el correcto: una propiedad invariante de las dos columnas es que el elemento de la segunda es igual al de la primera multiplicado por B. 
Así, el algoritmo se aprovecha de que 64+8+2=74 para calcular (64*37) + (8*37) + (2*37) = (64+8+2)*37 = 74*37. Este procedimiento tiene un contra muy importante, y es que a la mayoría de los humanos les supone un esfuerzo considerable descomponer un número cualquiera como suma de los elementos de una lista dada. 
En este caso no es difícil dado el formato de la lista, pero sigue sin ser totalmente directo, lo que hace que este algoritmo sea bastante lento. De hecho es uno de los peores de los descritos en este artículo.

Curiosidad: 
los algoritmos usados por los ordenadores se basan en mayor o menor medida en éste, pues representan todos los números como una colección de bits, es decir, dígitos binarios. Mención especial al algoritmo de Booth, que realiza sumas y también restas (por ejemplo, descompone el número 120 como 128-8, en vez de como 64+32+16+8).
La multiplicación de los cosacosOtro algoritmo de multiplicación, cronológicamente posterior al anterior pero muy similar.
 La diferencia está en el modo en que se construye la primera columna: en lugar de empezar poniendo un 1 y multiplicar por 2 en cada fila, ponemos el número A y vamos dividiendo por dos en cada paso, ignorando el resto, hasta llegar al 1. Por ejemplo, para multiplicar 89 por 114:
89114
44228
22456
11912
51824
23648
17296
Y ahora tomemos los números impares de la primera columna, y sumamos los números correspondientes de la segunda columna: 114+912+1824+7296=10146, que efectivamente es el resultado esperado.
Este algoritmo se parece todavía más al que usan los ordenadores, y es que la operación de división por 2
 se corresponde en el mundo binario con un simple desplazamiento de un dígito binario a la derecha, operación que por su simplicidad resulta óptima a la hora de servir como base para otros algoritmos: por ejemplo, el 89 es el 1011001 y el 44 (89/2, dividido por defecto) es el 101100, igual pero sin el 1 del final.

¿Cómo funciona este método?
 El parecido con el anterior es evidente, pero el funcionamiento no está tan claro.
 De nuevo, la gracia está en la representación binaria del algoritmo. Para empezar, el último dígito de la representación binaria de un número es el que indica la paridad de éste (0 par, 1 impar); partiendo de esto, lo que hace el algoritmo es colocar en la segunda columna un número igual a B desplazado a la derecha (o sea, multiplicado por 2) tantas veces como ha sido desplazado A a la izquierda en la primera columna.
 A la hora de multiplicar, estos desplazamientos se anulan, con lo que efectivamente estamos multiplicando B por uno de los dígitos de A, y la suma de todos los resultados es igual al producto de B por A. 
Es un poco difícil de entender, pero comparando con el algoritmo anterior creo que se ve bastante bien:
 el funcionamiento es el mismo, en el fondo lo que estamos haciendo es (114*1) + (114*8) + (114*16) + (114*64) = 114*(1+8+16+64) = 114*89, pero de forma menos evidente.
 Obsérvese que si realizamos una multiplicación cualquiera por ambos métodos, las columnas elegidas son siempre las mismas. Por ejemplo, veamos 74*37:
7437
3774
18148
9296
4592
21184
12368
La suma es 74+296+2368=2738. ¿Casualidad? Por supuesto que no. 
Obsérvese, por cierto, que tanto en este método como en el anterior, 
el número de la última fila siempre hay que sumarlo.Multiplicación arábiga
Otro algoritmo más de multiplicación, pero éste muy distinto de los anteriores. 
Ahora nos olvidamos de dígitos binarios, y usamos esa base 10 que incomprensiblemente les gusta tanto a los humanos (aunque el algoritmo se puede usar en teoría con cualquier base numérica). 
Para empezar, tenemos que dibujar una cuadrícula inclinada 45º (estamos entrando ya en métodos gráficos). Partiendo de nuevo de que estemos multiplicando dos números A y B, la cuadrícula tendrá que tener en su lado superior izquierdo tantas divisiones como cifras tenga A, y en el lado superior derecho tantas como cifras haya en B. A continuación escribimos, sobre cada una de las divisiones de cada uno de los lados, las cifras de A y B en el orden natural (de izquierda a derecha), y trazamos líneas verticales que se crucen con todos los vértices de la cuadrícula. El resultado debería ser algo así (para multiplicar 145*28):



Ahora procedemos del siguiente modo: rellenamos cada elemento de la cuadrícula con el producto de los dos números asociados, poniendo a la izquierda de la raya vertical las decenas del resultado, y a la derecha las unidades. Por ejemplo, en este caso pondríamos 1|0 (2*5=10) en el cuadrado de más arriba, y 0|8 (1*8=8)
 en el de más abajo, y así sucesivamente hasta rellenar las 6 casillas.
 El resultado debería ser algo parecido a esto:



Ya está casi terminado. Ahora lo único que queda es ir sumando las cifras resultantes en orden, correspondiéndose cada división vertical con una cifra del resultado.
Unidades: 0.
Decenas: 0+4+2=6.
Centenas:1+8+3+8=20: pongo 0 y me llevo 2.
Unidades de millar:0+2+0, más 2 que me llevaba, 4.
Decenas de millar: 0.
Luego el resultado es 04060, ó 4060 si no les gustan los ceros a la izquierda.

¿Cómo funciona este método?
 En mi opinión es muy sencillo e intuitivo. Lo único que hace es reordenar la forma en que los humanos multiplicamos normalmente, añadiendo una división más: si lo normal para multiplicar 145 por 28 es descomponer el 28, multiplicando 145 por 8 y luego 145 por 2, este algoritmo simplemente va un paso más allá y descompone también el 145, de forma que hay más multiplicaciones pero son más simples: 5*8, 4*8, 1*8, 5*2, 4*2 y 1*2. El algoritmo se aprovecha de la disposición espacial de la cuadrícula para organizar automáticamente los desplazamientos necesarios, un detalle que aporta bastante elegancia al procedimiento.
Este método no me acaba de gustar (no me gusta lo visual, particularmente cuando estamos hablando de matemáticas), pero me parece que tiene un cierto valor didáctico. 

Multiplicación con rayas
Este método, relativamente popular como ejemplo de aritmética alternativa, es en realidad muy parecido al anterior, aunque a priori no lo parezca. En lugar de dibujar los números, se dibujan rayas, pero la disposición inicial es similar a la del algoritmo anterior: partiendo del lugar en el que antes colocábamos el número, ahora se dibuja un número de rayas igual a la cifra (esto es, 6 rayas para el número 6, 3 para el número 3, etc). Las rayas se dibujan paralelas y de tal modo que cada grupo de rayas se cruza, en determinada región concreta del papel (equivalente a las celdas cuadradas del método arábigo), formando exactamente una cantidad de cruces -señalados con puntos- igual al producto, lo que es totalmente lógico por pura combinatoria básica (si 3 rayas paralelas se cruzan con 2 perpendiculares a éstas, hay 2*3=6 cruces, p.e.).
 La estructura del algoritmo es casi idéntica, aunque no se dibujen explícitamente las celdas, así que remito al método anterior para la explicación del método.

Multiplicación con círculos
Otro método gráfico de discutible valor educativo pero indiscutiblemente pobre valor aritmético (demasiado lento, vaya). Este método usa grupos de círculos concéntricos y rayas que dividen a éstos en sectores, contando posteriormente el número de divisiones. 
El método está bastante bien ilustrado aquí, y me parece que se entiende bien,
 así que no detallaré su uso.

¿Cómo funciona este método? 
En realidad es muy simple. Para cada una de las posibles combinaciones entre una cifra del primer número y otra del segundo, se dibuja un grupo de círculos concéntricos; el número de éstos es igual a la cifra del primer número, y el número de rayas es igual a la cifra del otro. Puesto que las rayas son radiales y, naturalmente, no coincidentes, el número de divisiones resultante será igual a dicha segunda cifra; y como cada uno de los círculos es dividido, el resultado es que obtenemos un dibujo dividido en un número de regiones exactamente igual al producto de las dos cifras, con lo que no tenemos más que contar regiones para saber el producto de ambas cifras (¡mucho más rápido que hacer directamente la multiplicación! ejem...). 
Después se organizan los grupos de círculos, según el desplazamiento apropiado, y se suman los resultados parciales, dando lugar al resultado final.
Además de la enorme lentitud de este método (más lento aún que el de las rayas), existe un contra muy importante, y es que no se define qué hay que hacer cuando una de las cifras es 0 (y esto puede llevar a error si no se maneja con cuidado), algo que yo he interpretado libremente en mi programa.

Curiosidad (o no tanto): girando 45º en sentido antihorario el dibujo resultante (con el algoritmo original, 
no con el de mi programa), este procedimiento se convierte en otra variante más del método arábigo.

Logaritmos
Como ya adelantaba en la introducción, este método no es exacto.
 Lo cual es lógico si tenemos en cuenta que la inmensa mayoría de logaritmos son números irracionales con un número infinito de cifras, claro, pero es que encima ni siquiera la aproximación es exacta.
 El procedimiento es algo ortopédico pero muy simple y eficaz; aquí hablaré del método para logaritmos en base 10, aunque el de los neperianos (o cualquier otra base) es similar y no presenta dificultades adicionales.
El método parte de los logaritmos de 2, 3 y 5 (se pueden tomar más, pero con ésos basta). 
En el sitio en el que yo lo leí los indicaban con dos cifras (0'30, 0'48 y 0'70, respectivamente), aunque yo suelo usar 4 (0'3010, 0'4771 y 0'6990) y tomar las dos últimas cifras del resultado final;
 cuantas más cifras se tomen, mejor, eso está claro. Para calcular el logaritmo de un número entero,
 se procede de la siguiente manera:
  • En primer lugar, se descompone el número en factores primos. 
  • Esto, dependiendo del número, puede ser una tarea difícil de acometer. Pero para eso tenemos lápiz y papel, si es necesario.
  • Usando las propiedades de los logaritmos, sumamos los logaritmos de 2, 3 y 5 multiplicados por el coeficiente necesario (por ejemplo, si en la descomposición aparecía 23·36, sumamos 3*log(2)+6*log(3), con el número de cifras que hayamos tomado.
  • El resto de factores primos se halla por interpolación. O sea, que el logaritmo de 7 lo tomamos como la media entre el logaritmo de 6 (que es igual a log(3)+log(2)) y el logaritmo de 8 (que es 3*log(2)): log(7)=(log(6)+log(8))/2. En realidad, el logaritmo de 7 se aproxima muy mal, y yo prefiero tomarlo también como base (0'85 con dos cifras, 0'8451 con cuatro).
Es algo bestia, pero aproxima con cierta fiabilidad los logaritmos, y eso con métodos algebraicos no es trivial.
Para calcular logaritmos de números decimales, se usan de nuevo las propiedades de los logaritmos: log(2'43)=log(243/100)=log(243)-log(100)=5*log(3)-2*log(10). En el caso de los logaritmos decimales, el logaritmo de 10 es 1, lo que facilita enormemente los cálculos. En este caso, 5*0'4771-2=0'3855, que por si acaso truncamos a 0'39 para afianzar la poca exactitud que tenemos.

¿Y los logaritmos neperianos? 

Bueno, pues igual. Los logaritmos de 2, 3 y 5 son respectivamente 0'6931 (este dato lo tiene que saber bien todo físico o químico que se precie), 1'0986 y 1'6094. Cuidado, que el logaritmo neperiano de 10 no es 1 sino 2'3025, a la hora de calcular logaritmos de números decimales puede dar por culo.
En fin, voy a detallar el cálculo de un logaritmo, por ejemplo el de 17745.
 Número escogido con cuidado, por supuesto, para que sea igual a 3*5*7*132
El logaritmo de 13 lo calculamos a partir del de 12 (2*log(2)+log(3)=1'0791) y el de 14 (log(2)+log(7)=1'1461).
 La media de estos dos valores es 1'1126. Entonces, el logaritmo inicial es igual a log(3)+log(5)+log(7)+2*log(13)=0'4771+0'6990+0'8451+2*1'1126=4'2464. 
Redondeando, el logaritmo es 4'25,
 que es efectivamente el valor pedido.

¿Cómo funciona este método?
 Usando las propiedades de los logaritmos, por supuesto. Pero ¿y el tema de las interpolaciones?
 No es muy ortodoxo, eso de aproximar logaritmos en vez de calcularlos. El tema es el siguiente: la derivada segunda de la función logaritmo es igual a -x-2, una función que tiende rápidamente a 0. 
Esto significa que la función logaritmo se comporta localmente de forma parecida a una recta, especialmente para valores muy altos de x, y la aproximación es buena, incluso para intervalos de tamaño 2.
Por otro lado, los más avispados ya se habrán dado cuenta del truco.
 Si, para calcular el logaritmo de 17, usamos (log(16)+log(18))/2, en realidad lo que estamos haciendo es calcular el logaritmo de la media geométrica (¡no la aritmética, que es la que interesaría!)
 de 16 y 18, es decir, estamos calculando el logaritmo de la raíz cuadrada de 16*18=288, en vez de 17. 
Pero es que 172=289, por lo que la diferencia es escasa. Recurrimos de nuevo a las derivadas del logaritmo, esta vez a la primera, 1/x, para estimar el error: éste ronda el valor (17-sqrt(288))/17, que es menor que 0'002. Todo este rollo para explicar que el error es bajo, pero existe, y por eso prefiero redondear las dos últimas cifras del resultado que salga.
 Por cierto, obsérvese que el logaritmo de 17745 está calculado en realidad como log(3)+log(5)+log(7)+log(12)+log(14)=log(17640), y aún así la aproximación con dos cifras es exacta.
Para este método no pongo un programa de muestra, entre otras razones porque no me gusta su falta de precisión, y porque sería muy lioso explicar el funcionamiento mediante una serie relativamente
 desordenada de cálculos.

Multiplicación de aridad múltiple
Entramos en el pantanoso terreno de los algoritmos que he creado 
(aunque no me sorprendería en absoluto que a alguien se les hubiera ocurrido antes). 
Consecuentemente, estos algoritmos son más pragmáticos que visuales, y algo más difíciles de entender.
La idea de este algoritmo surgió justo antes de empezar este artículo.
 Puesto que el algoritmo de las rayas es, en el fondo, una simulación gráfica de los posibles cruces entre cifras de dos números, se me ocurrió que en un espacio tridimensional se podrían usar planos cuyas intersecciones 
3 a 3 formaran los puntos a contar para obtener el resultado (y en un espacio N-dimensional, hiperplanos de
 N-1 dimensiones... etc, etc).
 Lo interesante es olvidarse de grafismos ineficientes y quedarse con la idea de cruzar arbitrariamente los productos de cuantas cifras queramos... a mí siempre me ha fastidiado un poco que sumar varios números a la vez sea sencillo, pero no exista un algoritmo parecido para multiplicar varios números.
 Pues el algoritmo éste no es particularmente sencillo, pero al menos permite productos múltiples y con eso ya me puedo dar con un canto en los dientes.
Si el algoritmo arábigo (y el de las rayas, y el de los círculos) ordenaba el producto como una serie de productos de dos cifras, recolocados según el desplazamiento decimal necesario para garantizar la corrección, la idea de extender el algoritmo es sencilla: ordenemos un producto de N números como muchos productos de N cifras, y luego sumemos todos los resultados (muchos, normalmente. Ojo a esto) de forma acorde con el desplazamiento necesario, que naturalmente es igual a la suma de los desplazamientos de las cifras implicadas (ya que cada desplazamiento decimal es en realidad un producto por 10).
 Sencillo sobre el papel, algo lioso en la práctica. Por ejemplo:

            753
           x159
           x127

      ---------
3*9*7=      189
5*9*7=     315
7*9*7=    441
3*5*7=     105
5*5*7=    175
7*5*7=   245
3*1*7=     21
5*1*7=    35
7*1*7=   49
3*9*2=      54
5*9*2=     90
7*9*2=   126
3*5*2=     30
5*5*2=    50
7*5*2=   70
3*1*2=     6
5*1*2=   10
7*1*2=  14
3*9*1=     27
5*9*1=    45
7*9*1=   63
3*5*1=    15
5*5*1=   25
7*5*1=  35
3*3*1=    3
5*1*1=   5
7*1*1=  7
      ---------
       15205329
Sí, pero se tarda menos que multiplicando mediante la propiedad asociativa (multiplicando primero dos de los números entre sí, y luego el resultado por el otro).
 O al menos yo hubiera tardado más, no sé los humanos cómo andan de rapidez para estas cosas.

Potenciación por Newton
Este algoritmo es razonablemente más simple que el anterior, y lo llevo usando desde algún momento indeterminado entre los 8 y los 10 años, gracias al nunca bien ponderado número 161051 (por razones que no caben aquí). 
La idea no es complicada: usar un binomio de Newton para ayudar a calcular el resultado. 
Por ejemplo, para elevar 37 al cubo, separamos el 37 como 30+7, y aplicamos el binomio de Newton: (30+7)3=303+3*302*7+3*30*72+73=27000+18900+4410+343=50653. A primera vista el método parece demasiado abstruso como para ser fácil de usar, pero el truco está, de nuevo, en tratar el tema de los desplazamientos como si fuera una multiplicación. 
Dicho de otro modo, la idea es no pensar en 37 como 30+7, sino como en un 3 seguido de un 7. 
Luego sólo hay que hacer algunas operaciones simples y ya está, aunque hace falta conocer bien el triángulo de Tartaglia (detalle que creo que hace que el procedimiento sea poco apto para humanos, pero a mí me va bien). Además existe un orden sencillo (primero el número inferior elevado a la máxima potencia, luego elevado a la máxima menos uno y multiplicado por el superior, etc), 
cosa que no ocurre con el anterior algoritmo. Veamos:
1*7*7*7=   343
3*7*7*3=  441
3*7*3*3= 189
1*3*3*3= 27
        ------
         50653
Nótese que la primera columna de números (1-3-3-1) es la tercera fila del triángulo de Tartaglia.
 El resto de números están ordenados de forma, creo, suficientemente intuitiva (incluso demasiado, tratándose de algo que he hecho yo), así que creo que hasta aquí la explicación. 
Hace falta saber qué es un binomio de Newton, pero me parece algo tan sumamente básico que paso de explicarlo. Miren en la wikipedia si quieren más información. 
Quiero hacer notar que, con un poco de práctica, y de conocimiento del triángulo de Tartaglia,
 el método es mucho más rápido que el método convencional a poco que el exponente sea grande
 (con que sea mayor que 2 ya se nota). 
Con este método he llegado a tener soltura calculando cuadrados de números de 4 cifras en bastante menos de un minuto, por ejemplo.
Un detalle que me gusta mucho de este algoritmo es la forma en la que encapsula para las potencias un funcionamiento al que ya estamos acostumbrados en las sumas y las multiplicaciones: en éstas, se parte de tablas con los resultados básicos que se combinan para tener el algoritmo final: la suma usa las tablas de sumar, la multiplicación usa también (¡no únicamente!) las de multiplicar, y esta chorrada usa tablas de potencias, dato sumamente absurdo para el común de los mortales pero en realidad tan útil como las otras tablas mencionadas.
Contras
Este algoritmo, en realidad, es demasiado confuso para un profano, por dos razones.
 La primera es que obliga a conocer tanto el triángulo de Tartaglia como las potencias más simples de los números de una cifra, datos bastante poco conocidos entre el público en general (sobre todo este último); 
y la segunda es que para números mayores de 2 cifras el algoritmo se tiene que usar de forma recursiva: para elevar 728 al cubo, se puede hacer como (700+28)3 o como (720+8)3 (obsérvese que en el primer caso el desplazamiento a añadir es de 2 dígitos tras cada resultado parcial, pues el 700 tiene 2 ceros). 
En ambos casos uno de los sumandos tiene dos cifras significativas y requiere cálculos adicionales (a menos que se tenga una tabla de potencias más o menos extensa, como la que tengo yo a fuerza de costumbre).
 Aún así, el algoritmo es bastante rápido si se sabe usar con soltura, y lo prefiero, con mucho, antes que el algoritmo normal consistente en multiplicar varias veces la misma cifra. 
Pueden trastear tanto como quieran usando esta implementación (ojo, el funcionamiento puede no quedar muy claro si al algoritmo se le pasa una base muy grande, ya que no implementa realmente la recursividad, sino que sólo hace una partición).Como curiosidad, menciono que invirtiendo este algoritmo creé un método para calcular raíces de cualquier índice natural. El método es lento y raro, pero creo que no hay ninguna alternativa conocida, salvo usar logaritmos (que supongo que es lo que hacen las calculadoras). Ya es algo.

Potenciación por combinatoria
Este método es una mezcla de los dos anteriores y se me ocurrió hace sólo unos días. 
Este algoritmo lleva el caso anterior al extremo. 
¿Qué queremos elevar a cierta potencia un número de varias cifras? 
Pues, en vez de descomponer recursivamente el número en dos trozos, lo descomponemos una vez en varios trozos de una cifra. En principio la idea parece buena, pero lo duro viene cuando vamos a calcular el coeficiente que acompaña a cada producto. Este coeficiente ha de obtenerse por fuerza de una fórmula combinatoria de permutación con repeticiones, que no es muy compleja pero puede ser tediosa. 
Ya, nadie dijo que elevar un número de 5 cifras a la 7ª potencia fuera fácil, pero tener que calcular fórmulas del estilo de 7!/3!2!1!1!0! unas cuantas veces acaba resultando pesado. 
En el caso que expongo, se trataría del coeficiente que multiplica a a3·b2·c1·d1·e0
Además, el número de combinaciones a considerar es altísimo (concretamente, hay que estudiar un número de casos igual al número de combinaciones con repetición de n elementos tomados de m en m, donde n es el exponente y m es el número de cifras... en el caso anterior de n=7 y m=5, esta cifra se eleva a ¡330! casos de estudio). Insisto de nuevo en la burricie intrínseca del método, que lo hace totalmente impracticable y lo relega al ámbito experimental.
 
Algoritmo "egipcio" de potenciación
Este algoritmo es útil cuando hay que elevar un número cualquiera a una potencia muy grande, problema muy común en criptografía. La idea es copiar el algoritmo egipcio (o su clon, el de los cosacos), operando sobre el exponente de una potencia en lugar del multiplicando de un producto. De nuevo se aplica una regla distributiva, esta vez de la potenciación con respecto del producto: ab·ac=ab+c
Esto permite, por ejemplo, elevar un número a la 207ª potencia realizando sólo 13 multiplicaciones (algunas de ellas con números muy grandes, eso sí). 
Análogamente al otro algoritmo, se construyen dos columnas, la primera con 1, 2, 4, 8... y la segunda se construye recursivamente de manera que el primer número es igual a la base de la potencia,
 y cada uno de los demás es igual al anterior multiplicado por sí mismo.
 Por ejemplo, 15207:
115
2225
450625
82562890625
166568408355...
324314398832...
641861403728...
1283464823841...
No pongo los números completos porque cada uno de ellos es el doble de largo que el anterior.
 Y en fin, como 207=128+64+8+4+2+1, agarremos las cifras adecuadas de la segunda columna y las multiplicamos entre sí, obteniendo un mamotreto de 224 cifras que se corresponde con la operación a calcular.
 Por supuesto este algoritmo está pensado únicamente para ordenadores y su utilidad cotidiana es aún más remota que la de todos los expuestos anteriormente, pero tiene la gran ventaja de agilizar cálculos al reducir enormemente el número de multiplicaciones, eliminando además la falta de precisión inherente a los cálculos con logaritmos que se realizan normalmente cuando el exponente es muy grande (unas cuantas pruebas al azar pueden dejar en evidencia a la calculadora de Windows). 

Y hasta aquí hemos llegado. 
Poca gente habrá terminado el artículo completo, o quizá nadie, pero bueno, algo es algo.
 La mayoría de estos algoritmos en realidad son anacronismos en esta era de ordenadores y calculadoras, 
pero algunos de ellos siguen teniendo un gran valor didáctico, y otros pueden agilizar enormemente el cálculo mental, disciplina en tremendo desuso a la cual sólo cuatro gatos locos tenemos afición.