Anda di halaman 1dari 12

.

ARITMETICA I
Algunos algoritmos clásicos

Juan Tena Ayuso

Universidad de Valladolid
Aritmética I

El objetivo es mostrar algunos algoritmos aritméticos


clásicos (algunos se remontan a muchos siglos) pero que
mantienen su interés original y además han encontrado
nuevas aplicaciones tanto en matemáticas como en otras
disciplinas.

Algoritmo de Euclides

Se trata de uno de los más antiguos algoritmos conoci-


dos (Euclides, libro VII). Permite el cálculo del máximo
común divisor d de dos números a, b ∈ N. Una modi-
ficación (conocida como algoritmo de Euclides Exten-
dido) permite además obtener d como combinación lineal
de a y b con coeficientes enteros, es decir d = ax + by
relación conocida como identidad de Bezout.

Motivación e interés: El algoritmo de Euclides ex-


tendido permite resolver dos problemas:
• Cálculo eficiente del M.c.d.: Para a, b grandes
(por ejemplo en Criptografı́a se trabaja rutinaria-
mente con números de 200-300 cifras decimales) la
conocida regla de factorizar a y b es inaplicable. En
efecto el factorizar es un proceso muy costoso (y de
hecho imposible hoy en dı́a para números del tamaño
mencionado). De hecho diversos métodos de factor-
ización de un número n utilizan como herramienta el
cálculo de mcd(n, x) para x apropiados.
• Cálculo del inverso modular a−1 ( mod n): En
las congruencias módulo n, o equivalentemente en el
anillo Z/nZ de restos módulo n se tienen las opera-
ciones de adición y multiplicación, pero no siempre
es posible la división por un elemento a, por que no
siempre existe a−1 (modn).
Un elemento a + nZ ∈ Z/nZ tiene inverso (o es una
unidad del anillo Z/nZ), si y solamente si mcd(a, n) =
1. En lenguaje de congruencias, tal existencia de in-
versos se expresa diciendo que existe b ∈ Z tal que
ab ≡ 1 (mod n).
El cálculo efectivo de tal inverso viene dado por la
identidad de Bezout. En virtud de esta existen x, y ∈
Z verificando ax + ny = 1. El inverso buscado es
entonces x(modn).
El cálculo de inversos modulares se presenta en muchas
situaciones como por ejemplo en el sistema criptográfico
RSA. Señalemos aquı́ su uso en la computación sin
errores: en muchas situaciones el resultado de la
computación debe ser exacto, no siendo admisibles
los redondeos. En consecuencia si los cálculos com-
portan una fracción a/b esta no puede representarse
en forma decimal. Una solución es la siguiente:

Supongamos 0 ≤ |a| ≤ N , 0 ≤ |b| ≤ N (una


tal fracción se denomina fracción de Farey de orden
N ) y sea m primo tal que m ≥ 2N 2 + 1. Basta
entonces tomar el menor entero no negativo k tal
que k ≡ ab−1 mod m (inverso calculado con el al-
goritmo de Euclides). Los cálculos con a/b pueden
substituirse entonces por calculos con k.

Ejemplo: N = 3, m = 19. las fracciones 2/3, −1/3


corresponden con los números 7, 6. La suma 2/3 +
(−1/3) corresponde a la suma 7 + 6 = 13 que a su
vez corresponde a la fracción 1/3.
Descripción del algoritmo

Dados a ≥ b > 0,
1. tomar, como valores iniciales,
a0 := a, a1 := b, x0 := 1, x1 := 0, y0 := 0, y1 := 1.
2. Para i = 0, 1, · · ·, iterar las asignaciones
ai := qi+1ai+1 + ai+2
xi := qi+1xi+1 + xi+2
yi := qi+1yi+1 + yi+2
hasta obtener un resto ai = 0.
3. Si an+1 es el primer resto nulo, entonces d = an, x = xn, y = yn.
Eficiencia del algoritmo: Cada etapa del algoritmo
comporta solo varias operaciones elementales (una di-
visión, dos multiplicaciones y dos restas). Observese por
otra parte que los restos ai, forman una sucesión decre-
ciente. Por tanto, el algoritmo finaliza necesariamente en
un número finito de etapas. Más concretamente,

Lema: Si a ≥ b, el número de etapas necesarias en la


ejecución del algoritmo de Euclides extendido es O(log a).

En efecto los restos ai verifican la relación ai+2 < 12 ai,


lo que implica que el número de etapas es, a lo sumo,
2blog ac (Si ai+1 ≤ 21 ai, entonces ai+2 < ai+1 ≤ 21 ai. Si
ai+1 > 12 ai, la división euclidea proporciona ai = 1ai+1 +
ai+2, con lo que también en este caso, ai+2 = ai − ai+1 <
1
2 ai ).
Teorema Chino de los Restos

Dados naturales m1, m2, · · · , ms, tales que mcd(mi, mj ) =


1 para i 6= j, y dados enteros a1, · · · , as, el sistema de
congruencias
x ≡ ai (mod mi), i = 1, 2, · · · , s
admite solución única modulo m = m1m2 · · · ms.

Motivación: El teorema se atribuye a los antiguos


matemáticos chinos quienes lo habrı́an utilizado para la
confección de calendarios.

Demostración del teorema: Sea m = m1m2 · · · ms =


m1M1 = m2M2 = · · · = msMs y sea ni el inverso de Mi
módulo mi (que puede calcularse utilizando el algoritmo
de Euclides). Se comprueba inmediatamente que
x = n 1 M 1 a1 + · · · + n s M s as
es una solución. Para ver la unicidad, si y fuera otra
solución, entonces se verificarı́a z = x−y ≡ 0 (mod mi),
luego z ≡ 0 (mod m) y, por tanto, x ≡ y (mod m).
Representación china de números naturales.

Sea M = m1m2 · · · mk con (mi, mj ) = 1. En virtud


del teorema todo entero x 0 ≤ x < M admite una
representacion única (a1, a2, · · · , ak ). Estas expresiones
pueden sumarse y multiplicarse (coordenada a coorde-
nada y módulo mi).

Aplicación al cálculo de convoluciones

Supongamos por simplicidad M = m1m2. Sean dos


sucesiones a(i), b(i), i = 0, · · · , M − 1. Se define la
convolución de ambas como la nueva sucesión:
M
c(i) = a(j)b((i − j) mod M ), i = 0, · · · , M − 1
X

j=1

Utilizando la representación china para los ı́ndices se


obtiene la convolución 2-dimensional:

m
X1 m
X2
c(i1, i2) = a(j1, j2)b(i1−j1) mod m1, (i2−j2) mod m2
j1 =1 j2 =1

Utilizando la primera fórmula son necesarias M mul-


tiplicaciones para el cálculo de cada c(i), luego en total
M 2 multiplicaciones. Por contra utilizando la segunda
son necesarias solo m1 + m2 para calcular cada c(i1, i2)
luego un total de (m1 + m2)M multiplicaciones. Se con-
sigue pues una reducción de (m1 + m2)/M en el número
de multiplicaciones. Si M = m1m2 · · · mk se obtiene
una reducción de (m1 + m2 + · · · + mk )/M .

Función de Euler

Sea m ∈ Z y denotemos por (Z/mZ)∗ al grupo mul-


tiplicativo de las unidades del anillo Z/mZ. Se define la
función de Euler φ : N → N, mediante
φ(m) = #(Z/mZ)∗ = #{a | 0 < a < m, mcd(a, m) = 1}.
Motivación: La función de Euler permite conocer el
número de generadores de un grupo cı́clico de orden m,
por ejemplo el número de raı́ces complejas primitivas de
orden m de la unidad. Sea  una tal raı́z, (por ejemplo
 = e2πi/m. Las restantes raı́ces primitivas son las j con
mcd(j, m) = 1.

El cálculo de φ(m) es inmediato supuesto conocida la


descomposición de m en factores primos:

a) Si p es un número primo y r > 1, entonces φ(p) =


p − 1 y φ(pr ) = pr−1(p − 1) = pr − pr−1.
b) Si a, b ∈ N son tales que mcd(a, b) = 1, entonces
φ(ab) = φ(a)φ(b).

La propiedad b) anterior, se expresa diciendo que φ


es una función multiplicativa. Una consecuencia es el
resultado:

φ(m) = pe11 (1 − 1/p1) · · · pess (1 − 1/ps) = m (1 − 1/p)


Y

p|m

siendo m = pe11 pe22 · · · pess la descomposición de m en fac-


tores primos.

Nota: Sin conocer la factorización de m, la única


manera de calcular φ(m) es comprobar, para cada a <
m, si a es primo o no con m, lo que, para m grande,
es computacionalmente imposible. Esta observación es
crucial para la seguridad del sistema criptográfico RSA
(ver más adelante).

Se tiene el siguiente resultado

Teorema de Euler-Fermat Dados un natural m y


un entero a tales que mcd(a, m) = 1, se verifica que
aφ(m) ≡ 1 (mod m).
El teorema de Euler Fermat y la nota anterior son
cruciales para la seguridad del sistema criptográfico RSA
(ver más adelante).

Algoritmo de exponenciacion modular:

Motivación: En el teorema de Euler-Fermat apare-


cen una expresion del tipo an (mod m), y cálculos simi-
lares juegan un papel fundamental en los tests de primal-
idad, ası́ como en el sistema criptográfico RSA. Ahora
bien, para n grande, un cálculo del tipo anterior serı́a
impracticable si se intentase realizar multiplicando a por
si mismo n veces. Existe, sin embargo, un algoritmo (de
cuadrados repetidos) que permite realizar el cálculo an-
terior en solo k = longitud(n) etapas.

Dados n = s0 + s12 + · · · sk−12k−1 y b := 1,


1. Si s0 = 1 sea b :≡ ba (mod m).
Si s0 = 0 sea b := b.
Sea a1 :≡ a2 (mod m).
2. Si s1 = 1 sea b :≡ ba1 (mod m).
Si s1 = 0 sea b := b.
Sea a2 :≡ a21 (mod m). .
... ...
k-1. Si sk−2 = 1 sea b :≡ bak−2 (mod m).
Si sk−2 = 0 sea b := b.
Sea ak−1 :≡ a2k−2 (mod m).
k an ≡ bak−1 (mod m).
Nota: El algoritmo anterior permitirı́a asimismo el
cálculo de an (sin reducción módulo m). Nótese, sin em-
bargo, que los productos sucesivos que se van obteniendo
involucran números cada vez más grandes, no acotados
por la longitud de los datos a, n. Tal cálculo puede resul-
tar imposible.

Aplicación: Criptosistema R.S.A.: Cada usuario


i del sistema debe elegir una pareja de primos pi, qi, sufi-
cientemente grandes. Se calculan asimismo ni = piqi y
φ(ni). A continuación el usuario elige (arbitrariamente)
un número ei, 0 < ei < φ(ni), tal que mcd(ei, φ(ni)) =
1 y su inverso modular di ≡ e−1i (mod φ(ni )).
Nota: Tanto la verificación de que ei es primo con
φ(ni) como la obtención de su inverso, se realizan gracias
al algoritmo de Euclides.
El usuario dispone ya de todos los elementos necesarios
para sus claves:

Clave pública: (ni, ei);


Clave privada: di.

Para los procesos de cifrado y descifrado los mensajes


deben previamente identificarse con elementos del con-
junto Z/niZ (o si se prefiere números naturales menores
que ni).

Cifrado: Z/niZ −→ Z/niZ; M → 7 C ≡ M ei ( mod


ni);
Descifrado: Z/niZ −→ Z/niZ; C −→ C di ≡
M eidi ≡ M 1 mod φ(ni) ≡ M (mod ni).

Anda mungkin juga menyukai