Ecuaciones de opinión

Publicado el Ignacio Mantilla Prada

Algoritmo para calcular las fechas de la Semana Santa cada año

Cuando se aproxima la celebración de la Semana Santa surge recurrentemente la pregunta sobre quién es el encargado de establecer en el calendario esa semana cada año. Hay quienes creen que lo hace el Vaticano directamente; pero en realidad, cualquiera de nosotros puede saberlo con la exactitud y la anterioridad que lo desee, gracias a unas reglas muy precisas que fueron establecidas en el Concilio Ecuménico de Nicea, convocado por el emperador romano Constantino I en el año 325 para que todos los cristianos pudieran celebrar la Pascua el mismo día. 

Sin embargo, como lo he mencionado en artículos anteriores, en el año de 1582 el Papa Gregorio XIII tuvo que ajustar el Calendario Juliano que se usaba desde el año 46 a. C. eliminando 10 días: así, el día siguiente al jueves 4 de octubre de 1582 se contó como el viernes 15 de octubre y se definieron los futuros años centenarios divisibles por 400 como bisiestos y todos los demás múltiplos de 100 como normales, para evitar nuevos desfases. Con esta medida se corrigió el error acumulado desde el Concilio de Nicea, debido a la diferencia con la duración de un año solar y se logró que la fecha del 21 de marzo coincidiera nuevamente con la del equinoccio de primavera en el hemisferio norte, como se había fijado en Nicea.

Con la adopción del Calendario Gregoriano se acordó también que el domingo inmediatamente posterior a la primera luna llena (plenilunio) de primavera sería, cada año futuro, el Domingo de Pascua. Desde entonces se fijaron entonces las fechas de todas las Semanas Santas y con esas convenciones el Domingo de Resurrección no puede ser anterior al 22 de marzo ni posterior al 25 de abril.

El gran matemático alemán Carl Friedrich Gauss (1777 – 1855) hizo grandes aportes en muchas áreas de la matemática, pero además, como ya lo había mencionado en un artículo anterior, nos dejó un ingenioso y preciso método para calcular el Domingo de Pascua de cualquier año, plasmando en él ese acuerdo de 1582. 

En estos días de cuarentena, cuando algunos de nosotros disponemos de más tiempo para nuestros propios pasatiempos, me he entretenido revisando este algoritmo que quiero a continuación compartir con los lectores, con la esperanza de que también muchos de ustedes puedan entretenerse con estos sorprendentes cálculos que hizo Gauss hace cerca de 200 años, considerando todas las posibilidades de las fechas de Semana Santa.

El algoritmo de Gauss utiliza solamente unas reglas de “matemática modular” (es decir la operación mod para obtener el resto de la división de un número natural entre otro);  y puede ser implementado en un lenguaje de programación para ser usado introduciendo únicamente el año A que nos interese. Se usan las siguientes variables:

a, b, c, d, e, m, n, p, q, r  

definidas de la siguiente manera (en algunas se explica la función que cumple en el algoritmo):

  1. a:  es el resto de dividir el año A entre 19; es decir, a := A (mod 19). Esta es la variable que controla la ubicación del año A, dependiendo del ciclo lunar, ya que el ciclo lunar se repite cada 19 años con un error de 2 horas.
  2. b: es el resto de dividir A entre 4; esto es b := A(mod 4). Esta variable se usa para determinar años bisiestos
  3. c: es el resto de dividir A entre 7; es decir c := A(mod 7). Esta variable brinda información sobre los días de la semana.
  4. d: es la parte entera de A dividido entre 100. d := [A/100]. Para controlar cuáles años son centenarios.
  5. e: es la parte entera de (13+8d) dividido entre 25. e := [(13+8d)/25]. Variable usada para el ajuste de esas 2 horas de desfase en el ciclo lunar.
  6. m: es la parte entera de d dividido entre 4. m := [d/4].
  7. n: es el resto de dividir (15-e+d-m) entre 30. n := (15-e+d-m)(mod (30)). Esta variable tiene que ver con el cambio del calendario juliano al gregoriano, con los años bisiestos centenarios (variable d) y con el ajuste de ese pequeño error de 2 horas en el ciclo lunar. El módulo 30 que aparece aquí y en la definición de la variable q tiene que ver con el ciclo lunar de 30 días entre el 22 de marzo y el 20 de abril.
  8. p: es el resto de dividir (4+d-m) entre 7. Es decir p := (4+d-m)(mod 7).
  9. q: es el resto de dividir (19a+n) entre 30. O sea q := (19a+n)(mod 30). Esta variable nos permite calcular el número de días desde el 22 de marzo hasta la primera luna llena; en efecto, como el año lunar tiene aproximadamente 354 días, 11 menos que el año calendario de 365 días, y usar restos módulo 30 tiene el mismo efecto al restar 11 que al sumar 19, eso explica por qué aparece 19a en esta variable.
  10. r: es el resto de dividir (2b+4c+6q+p) entre 7. Es decir que:
    r := (2b+4c+6q+p)(mod 7). Esta variable calcula el número de días desde la primera luna llena hasta el primer domingo posterior a ella. También controla la forma como se desplaza el día de la semana de un año a otro, aún si el año es bisiesto. El módulo 7 arroja un valor entre 0 y 6; adicionalmente controla que el comienzo de los cálculos para cada siglo sea el correcto.Obsérvese que las variables d, e y m sólo se usan para calcular después n y p.

La fecha del domingo de Pascua se calcula ahora así:

Si (q+r) < = 9 entonces la fecha será en marzo 22+(q+r).

Si (q+r) > 9 entonces la fecha será en abril (q+r)-9.

Para esta regla existen dos excepciones:

  1. Si obtenemos el 26 de abril como resultado, entonces nos saldríamos del rango establecido, en tal caso el Domingo de Pascua será una semana antes, el 19 de abril.
  2. Si obtenemos como resultado el 25 de abril con q = 28, r = 6 y a > 10, entonces el Domingo de Pascua será una semana antes, el 18 de abril.

Ahora, como ejemplo, comprobemos que este año de 2020, el Domingo de Pascua es el 12 de abril. Veamos: A = 2020, entonces:

1. a = 2020 (mod 19) = 6, porque 2020/19 = 106 +6/19; es decir sobran 6 unidades; o sea el resto es 6; o lo que es lo mismo: 2020 = 19×106+6.

2. b = 0, porque 2020 es bisiesto: 2020 = 4×505+0.

3. c = 4, porque 2020 = 7×288+4.

4. d = 20, porque 2020/100 = 20,2 cuya parte entera es 20. 

5. e = 6, porque e := [(13+8d)/25] = [173/25] = [6,92] = 6.

6. m = 5, porque m := [d/4] = [20/4] = 5.

7. n = 24, porque n := (15-e+d-m)(mod (30)) = (15-6+20-5)(mod (30)) = 24 (mod 30) = 24.

8. p = 5, porque 4+d-m = 19 = 2×7+5.

9. q = 18, porque (19a+n) = 19×6+24 = 138 = 4×30 +18 

10. r = 3, porque r es el resto de dividir (2b+4c+6q+p) = 129 entre 7.

Ahora examinemos (q+r). Como en este caso el valor es 18+3 = 21, entonces tenemos el segundo caso por ser > 9; por lo tanto el Domingo de Pascua es:

abril (q+r-9) = abril (21-9) = abril 12.

Este algoritmo de Gauss forma parte de una cantidad apreciable de contribuciones que hizo este genio de las matemáticas para realizar cálculos numéricos; tal vez el algoritmo más conocido y difundido es el que se usa para resolver sistemas de ecuaciones lineales de cualquier orden. Una gran virtud, común a todos estos procedimientos algorítmicos, es sin duda la facilidad con que pueden implementarse hoy en día en un computador, usando cualquier lenguaje de programación y ocupando muy poca memoria; una tarea que ojalá los lectores intenten en esta Semana Santa de confinamiento. 

@MantillaIgnacio

Comentarios