El sistema Trachtenberg de rápido cálculo mental, similar a las matemáticas Védicas, consiste en un conjunto de patrones para realizar operaciones aritméticas. Los algoritmos más importantes son multiplicación,división, y adición. El método también incluye algoritmos especializados para realizar multiplicaciones por números entre 5 y 13.
Multiplicación por 11
Abusando de la notación
(11)a = 11Σai10i =
an10n+1 + [Σj=0n-1(aj+aj+1)10j ]+ a0
Multiplicación por 12
(12)a = 12Σai10i =
an10n+1 + [Σj=0n-1 (aj+2aj+1)10j ]+ 2a0
Multiplicación por 6
Definiendo
bj = aj/2, donde / denota división entera
cj = aj mod 2
tenemos
aj = 2bj + cj
(6)a = (10/2)Σai10i + Σai10i =
Σbi10i+1 + Σ(ai + 5ci)10i
bn10n+1 + [Σj=1n(aj + 5cj + bj-1)10j ]+ (a0 + 5c0)
Expresando el algoritmo en python:
def x6(number):
previous = 0
result = 0
power_of_10 = 1
while (number):
digit = number%10
odd_term = 5 if digit%2 else 0
result =
(digit + odd_term + previous ) *
power_of_10 + result
previous = digit//2
power_of_10 *= 10
number = number // 10
result = previous * power_of_10 + result
return result
Multiplicación por 7
De manera similar al caso anterior:
aj = 2bj + cj
(7)a = (10/2)Σai10i + Σ2ai10i =
Σbi10i+1 + Σ(2ai + 5ci)10i
bn10n+1 + [Σj=1n(2aj + 5cj + bj-1)10j ]+ (a0 + 5c0)
Expresando el algoritmo en python:
def x7(number):
previous = 0
result = 0
power_of_10 = 1
while (number):
digit = number%10
odd_term = 5 if digit%2 else 0
result =
(2*digit + odd_term + previous ) *
power_of_10 + result
previous = digit//2
power_of_10 *= 10
number = number // 10
result = previous * power_of_10 + result
return result
Multiplicación por 5
De manera similar al caso anterior:
aj = 2bj + cj
(5)a = (10/2)Σai10i =
Σbi10i+1 + Σ(5ci)10i
bn 10n+1 + [Σj=1n(5cj + bj-1)10j ]+ (5c0)
Expresando el algoritmo en python:
def x5(number):
previous = 0
result = 0
power_of_10 = 1
while (number):
digit = number%10
odd_term = 5 if digit%2 else 0
result =
(odd_term + previous ) *
power_of_10 + result
previous = digit//2
power_of_10 *= 10
number = number // 10
result = previous * power_of_10 + result
return result
Multiplicación por 9
Definiendo
b = 10n+1 - Σj=0naj , o sea el complemento a 10 de a
tenemos
(9)a = 10a –a =
10a –a + b – b =
10a + b - 10n+1 =
(an – 1)10n+1 + [Σj=1n(bj + aj-1)10j ]+ (b0 )
Expresando el algoritmo en python:
def x9(number):
previous = number%10
result = 10 - previous
power_of_10 = 10
number = number // 10
while (number):
digit = number%10
result =
(9 - digit + previous ) *
power_of_10 + result
previous = digit
power_of_10 *= 10
number = number // 10
result =
(previous-1) * power_of_10 +
result
return result
Multiplicación por 8
Definiendo
b = 10n+1 - Σj=0naj , o sea el complemento a 10 de a
tenemos
(8)a = 10a –2a =
10a –2a +2 b – 2b =
10a + 2b – (2)10n+1 =
(an – 2)10n+1 + [Σj=1n(2bj + aj-1)10j ]+ (2b0 )
Expresando el algoritmo en python:
def x8(number):
previous = number%10
result = 2*(10 - previous)
power_of_10 = 10
number = number // 10
while (number):
digit = number%10
result =
(2*(9 - digit) + previous ) *
power_of_10 + result
previous = digit
power_of_10 *= 10
number = number // 10
result =
(previous-2) *
power_of_10 + result
return result
Multiplicación por 3 y por 4
Los algoritmos para multiplicar por 3 y por 4 combinan las ideas usadas en la multiplicación por 5 y por 9.
Definiendo
b = 10n+1 - Σj=0naj , o sea el complemento a 10 de a
ai = 2ci + di, donde
ci = ai/2
di = ai mod 2
tenemos
(4)a = 5a –a =
10c + 5d + b - 10n+1
(3)a = 5a –2a =
10c + + 5d + 2b – (2)10n+1
Expresando los algoritmos en python:
def x3(number):
digit = number%10
result = 2*(10 - digit)
if digit % 2:
result += 5
previous = digit // 2
power_of_10 = 10
number = number // 10
while (number):
digit = number%10
odd_term = 5 if digit%2 else 0
result +=(2*(9 - digit) + odd_term + previous ) * power_of_10
previous = digit//2
power_of_10 *= 10
number = number // 10
result = (previous-2) * power_of_10 + result
return result
def x4(number):
digit = number%10
result = (10 - digit)
if digit % 2:
result += 5
previous = digit // 2
power_of_10 = 10
number = number // 10
while (number):
digit = number%10
odd_term = 5 if digit%2 else 0
result +=((9 - digit) + odd_term + previous ) * power_of_10
previous = digit//2
power_of_10 *= 10
number = number // 10
result = (previous-1) * power_of_10 + result
return result
Referencias