Algoritmo de O’Beirne, em 10 passos, para determinar o Domingo de Páscoa.

Seja x o ano.

1. Divida-se x por 100 e anote-se o quociente (b) e o resto (c);

2. Tome-se 5b+c e divida-se por 19; chame-se a ao resto;

3. Calcule-se 3(b+25) e divida-se por 4; designe-se o quociente por δ e o resto por ɛ;

4. Calcule-se 8(b+11) e divida-se por 25; anote-se o valor do quociente (γ);

5.  Calcule-se 19a+δγ e divida-se por 30; anote-se o valor do resto (h);

6. Calcule-se a+11h e divida-se por 319; anote-se o valor do quociente (μ);

 7. Calcule-se 60(5-ɛ)+c e divida-se por 4;  anote-se o valor do quociente (j) e do resto (k);

8. Calcule-se 2jkh+μ e divida-se por 7;  anote-se o valor do resto (λ);

9. Calcule-se hμ+λ+110 e divida-se por 30;  anote-se o valor do quociente (n) e do resto (q);

10. Calcule-se q+5-n e divida-se por 32;  o quociente deve ser nulo e ao resto chame-se p.

Ao fim destes 10 passos obtem o Domingo de Páscoa: é o dia p do mês n do ano x.

Este algoritmo baseia-se num artigo da Nature de 1876.

Fonte: entrada Another Chance to Read … Calendars do Mathematics Weblog.

Adenda de 16.02.2010 (publicada em entrada prória aqui): eis um exemplo de programação deste algoritmo em Python, que define as funções pascoa(x) e easter(x) através da palavra reservada def, respectivamente a versão portuguesa e a inglesa, que poderão ser chamadas escrevendo-as simplesmente a seguir ao prompt:  

 
>>> pascoa(2010)
Em 2010 o Domingo de Páscoa é no dia 4 de Abril
 
>>> pascoa(2011)
Em 2011 o Domingo de Páscoa é no dia 24 de Abril

 

O algoritmo é extremamente simples: é meramente sequencial, reproduzindo os 10 passos em cima listados. A barra ‘ / ‘ executa a divisão inteira (que corresponde à função floor).
 
def pascoa(x): # ‘script’ em Python que define a função
#                pascoa(x), em que x é o ano.
#
# Baseado no algoritmo de O’Beirne, em 10 passos,
# para determinar a data do Domingo de Páscoa de
# um dado ano. ( Calcula e escreve o dia e o mês )
#
#
b = x / 100
c = x – 100 * b
quociente = (5 * b + c) / 19
a = 5 * b + c – 19 * quociente
d = (3 * (b + 25)) / 4
e = 3 * (b + 25) – 4 * d
g = (8 * (b + 11)) / 25
quociente = (19 * a + d – g) / 30
h = 19 * a + d – g – 30 * quociente
m = (a + 11 * h) / 319
j = (60 * (5 – e) + c) / 4
k = 60 * (5 – e) + c – 4 * j
quociente = (2 * j – k – h + m) / 7
l = 2 * j – k – h + m – 7 * quociente
n = (h – m + l + 110) / 30 # n é o mês (valor numérico)
q = h – m + l + 110 – 30 * n
quociente = (q + 5 – n) / 32
p = q + 5 – n              # p é o dia
if n == 3:
  N = ‘Março’              # N é o nome do mês
else:
  N = ‘Abril’
if quociente != 0:
  print ‘erro’
else:
  print ‘Em’, x, ‘o Domingo de Páscoa é no dia’, p, ‘de’, N

* * *

>>> easter(2010)
In 2010 the Easter Sunday is on April 4

>>> easter(2011)
In 2011 the Easter Sunday is on April 24

 

def easter(x): # Python script that defines the easter(x)
#                function, where x is the year.
#
# Based on the 10 step O’Beirne’s algorithm to
# compute the date of Easter Sunday of a given
# year.(Computes and writes the day and the month)
#
#
b = x / 100
c = x – 100 * b
quotient = (5 * b + c) / 19
a = 5 * b + c – 19 * quotient
d = (3 * (b + 25)) / 4
e = 3 * (b + 25) – 4 * d
g = (8 * (b + 11)) / 25
quotient = (19 * a + d – g) / 30
h = 19 * a + d – g – 30 * quotient
m = (a + 11 * h) / 319
j = (60 * (5 – e) + c) / 4
k = 60 * (5 – e) + c – 4 * j
quotient = (2 * j – k – h + m) / 7
l = 2 * j – k – h + m – 7 * quotient
n = (h – m + l + 110) / 30 # n is the month(numerical value)
q = h – m + l + 110 – 30 * n
quotient = (q + 5 – n) / 32
p = q + 5 – n              # p is the day
if n == 3:
  N = ‘March’              # N is the month name
else:
  N = ‘April’
if quotient != 0:
  print ‘error’
else:
  print ‘In’, x, ‘the Easter Sunday is on’, N,

Sobre Américo Tavares

eng. electrotécnico reformado / retired electrical engineer
Esta entrada foi publicada em Matemática, Programação, Python com as etiquetas , . ligação permanente.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s