Modularidad en sistemas numéricos: una aproximación matemática

Modularidad en sistemas numéricos: una aproximación matemática

Cuando enseño el concepto de modularidad o módulo en sistemas numéricos posicionales a alumnos de tercero de la ESO sus caras son como si les estuviera explicando integrales dobles. No entiendo aún el porqué pero les resulta un concepto complicado, cuando realmente no lo es tanto. Sólo hay que tener en cuenta qué es la división entera y el resto de la división, cosa que a estas edades, aún no está tan clara. En este artículo, exploraremos qué es el concepto de modularidad en sistemas numéricos posicionales, haremos una aproximación matemática al concepto y exploraremos sus usos dentro de las Ciencias de la Computación.

¿Qué es la modularidad en los sistemas numéricos?

Sistemas numéricos posicionales

Antes de entrar en conocer qué es la modularidad, debemos hablar de los sistemas numéricos posicionales. Éstos son aquellos sistemas en los que los dígitos que los componen ocupan un lugar en el número y además, ese lugar tiene asociado un valor.

El sistema numérico decimal es un sistema posicional ya que cada uno de los dígitos que contiene un número tiene asociado un valor intrínseco. Por ejemplo, si tomamos el número 234 (doscientos treinta y cuatro), tenemos que cada uno de los dígitos, por ocupar esa posición tienen un valor que proviene de las potencias del número 10 (por eso, lo de sistema decimal).

El desglose de este número queda de la siguiente forma:

  • 4 x 100 = 4 x 1 = 4
  • 3 x 101 = 3 x 10 = 30
  • 2 x 102 = 2 x 100 = 200

Ahora, si sumamos los números 200, 30 y 4 tendremos el resultado 234, que es nuestro número. Con eso, se acaba de demostrar que el número 234 tiene un valor diferente del 324 que, conteniendo los mismos dígitos, nos daría un número con mayor valor ya que el dígito en la posición 102 (3) es mayor que en el caso anterior (2).

Casi todos los sistemas numéricos que conoces son posicionales como el sistema decimal, binario, hexadecimal, octal, … etcétera. Sin embargo, hay algunos sistemas numéricos que no son posicionales. Son los sistemas no posicionales, como el sistema romano o el mesopotámico. El sistema numérico romano, que es el más conocido, está compuesto por una serie de caracteres: I, V, X, C, D, M, … Este sistema forma números a partir de una serie de reglas (que no describiré aquí) pero no tienen en cuenta en ningún caso la posición de estos caracteres.

El concepto de modularidad

Ahora sí, hablemos de la modularidad (también conocida como módulo). La modularidad en un sistema se refiere a la idea de encontrar el residuo o resto de una división de dos números enteros (división entera). Una división entera es aquella que se realiza a partir de dos números enteros y genera un número entero también. Por ejemplo, la división entera entre 5 y 2 nos da como resultado el número 2. Esto indica que si tenemos 5 elementos y queremos hacer grupos de 2 elementos, sólo podrremos hacer 2 grupos y nos restará 1 elemento. Si hacemos lo mismo para 10 y 8, el resultado es 1, es decir, podremos hacer tan sólo un grupo de 8 elementos y, en este caso, sobrarán 2 elementos. En la siguiente imagen animada, puedes ver cómo se calcula el módulo de los números 11 y 4, cuyo resultado es 3.

Imagen animada sobre el cálculo de la modularidad. Fuente: computerhope.com

En términos simples, cuando dividimos un número m por otro n:

  • la división entera nos indica cuántos grupos de n elementos se pueden formar con los m elementos totales
  • la modularidad o módulo nos indica cuántos elementos sobran de los m iniciales después de haber formado el máximo número de grupos de n elementos.

Veamos algunos ejemplos:

  • Si tenemos dos números, 17 y 5, su módulo es 2
  • Si dividimos los números 123 y 10, la modularidad es 3
  • Si tenemos dos números, 30 y 3, su módulo es 0, es decir, se han podido hacer grupos de 3 elementos sin que sobre ninguno.

Una aproximación matemática a la modularidad. Aritmética modular.

Vamos a adentrarnos un poco en el terreno matemático que está detrás del concepto de modularidad, lo cual se conoce como Aritmética Modular. En Matemáticas, la modularidad se expresa como: a mod b y se explica de la siguiente forma:

Si a y b son dos números enteros y b es distinto de 0, entonces existen dos enteros únicos llamados cociente (q) y resto(r) tales que:

a = b·q + r --> r = a - b·q --> a mod b = a - b·q

Podemos comprobar si esta definición es correcta o no haciendo divisiones enteras de números:

  • Si dividimos 30 entre 4, se tiene que:
    • a = 30
    • b = 4
    • q = 7
    • Por lo tanto, a mod b = a – b· q = 30 – 4·7 = 30 – 28 = 2; por lo tanto el módulo de 30 y 4 es 2.
  • Si dividimos ahora 128 entre 9, se tiene que:
    • a = 128
    • b = 9
    • q = 14
    • Por tanto, a mod b = a – b·q = 128 – 9·14 = 128 – 126 = 2

Aplicaciones de la modularidad

La modularidad tiene diversas aplicaciones en nuestra vida diaria (aunque muchas veces no nos demos ni cuenta), como es el caso de los relojes analógicos y los calendarios y en las ciencias de la computación, como es el caso de la criptografía y la programación. Veamos los siguientes ejemplos.

Relojes

Los relojes son un excelente ejemplo de aritmética modular. Imagina que tienes un reloj de 12 horas y son las 9 en punto. Si deseas añadir 5 horas, en lugar de obtener 14, el reloj muestra 2. Esto se debe a que aplicamos la operación modular:

14 mod 12 = 2

En otras palabras, estamos buscando el residuo de la división de 14 entre 12, que es 2. Así, el reloj nos indica correctamente las 2 en punto, cuando en realidad también son las 14 h.

Calendarios

Los calendarios también utilizan la modularidad para calcular los días de la semana. Supongamos que hoy es lunes (que corresponde al número 1) y queremos saber qué día será dentro de 10 días. Realizamos la siguiente operación:

(1 + 10) mod 7 = 4

El resultado es 4, que corresponde al jueves. Por lo tanto, dentro de 10 días, será jueves, ya que el número 4 corresponde al número de día de la semana, empezando por el lunes que es el número 1.

Veamos cómo sería este ejemplo del calendario usando código en Python. Supongamos que estamos diseñando un sistema de calendario simple que necesita determinar el día de la semana para cualquier número de días en el futuro. Podemos utilizar la aritmética modular para lograrlo:

def calcular_dia_semana(dias_desde_lunes):
    dias_semana = ["Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"]
    return dias_semana[dias_desde_lunes % 7]

# Si hoy es lunes y queremos saber qué día será en 10 días
print(calcular_dia_semana(10))  # Salida: Jueves

Criptografía

La modularidad es esencial en criptografía. Por ejemplo, el algoritmo RSA, utilizado para proteger datos, se basa en operaciones modulares. En RSA, se realizan cálculos con números grandes y se aplican operaciones como la exponenciación modular para garantizar la seguridad de las comunicaciones.

El algoritmo RSA se basa en la aritmética modular para proteger datos, encriptándolos y desencriptándolos. Por ejemplo, cuando los encripta se utiliza la fórmula:

c = m ^ e mod n

donde:

  • c representa el texto cifrado (el resultado de cifrar el mensaje original).
  • d es el exponente de descifrado, parte de la clave privada.
  • m es el mensaje original que queremos cifrar o descifrar.
  • n es el módulo RSA, compartido entre las claves pública y privada.

Control de Flujos y Ciclos

En programación, la aritmética modular es útil para controlar ciclos y bucles. Por ejemplo, si deseamos que un contador vuelva a comenzar después de alcanzar un cierto valor, utilizamos la operación modular. Aquí tienes un ejemplo en Python:

for i in range(20):
    print(i % 5)

Este bucle imprimirá los números del 0 al 4 repetidamente. Cuando i llega a 5, vuelve a 0 y continúa.

Saber si un número es divisible por otro

Si hacemos el módulo de un número a con otro número b, si el resultado es 0 significa que a es divisible por b, ya que se realiza la división entera y no hay ningún resto. Esto tiene su aplicación en programación para, por ejemplo, saber si un número es par o no cuando se hace el módulo con 2. El código en Python sería el siguiente:

if num % 2 == 0:
  result = "The number ",num," is even."
else:
  result = "The number ",num," is odd."
print(result)

Conclusión

La modularidad es una herramienta poderosa y versátil. Nos ayuda a simplificar cálculos y resolver problemas tanto en la vida diaria como en la computación y la programación. Desde saber la hora en un reloj hasta proteger datos en criptografía, la modularidad demuestra ser una parte esencial de nuestro mundo moderno .

Referencias

Imagen extraída de https://www.computerhope.com/jargon/m/modulo.htm

Crandall, R., & Pomerance, C. (2021). Prime numbers: A computational perspective (3rd ed.). Springer.

Knuth, D. E. (2018). The art of computer programming, Volume 2: Seminumerical algorithms (3rd ed.). Addison-Wesley Professional.

Koblitz, N. (1994). A course in number theory and cryptography (2nd ed.). Springer.

Rosen, K. H. (2019). Elementary number theory and its applications (7th ed.). Pearson.

Čeliković, M. (2020). Modular arithmetic and its applications in computer science. Journal of Computing and Information Technology, 28(1), 1-14. https://doi.org/10.20532/cit.2020.1004711

Paar, C., & Pelzl, J. (2010). The RSA Cryptosystem. In Understanding Cryptography (pp. 173-204). Springer. https://doi.org/10.1007/978-3-642-04101-3_8

Brilliant.org. (s.f.). Modular arithmetic. Recuperado el 29 de junio de 2024, de https://brilliant.org/wiki/modular-arithmetic/

Khan Academy. (s.f.). Intro to modular arithmetic. Recuperado el 29 de junio de 2024, de https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/what-is-modular-arithmetic

MathIsFun.com. (s.f.). Modular arithmetic. Recuperado el 29 de junio de 2024, de https://www.mathsisfun.com/definitions/modular-arithmetic.html

Python Software Foundation. (s.f.). Built-in types – Numeric types. Python 3.9.5 documentation. Recuperado el 29 de junio de 2024, de https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex


Descubre más desde nauKabits.com

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

error: Contenido protegido

Descubre más desde nauKabits.com

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo