2022年4月16日 星期六

高斯的復活節演算法

相信大家都知道復活節的日期年年不同。那究竟復活節的日期是怎樣計算的呢?

根據羅馬教會定出的規則,復活節的日期是在321日當日或之後的滿月日後的首個星期日。這個規則非常奇怪,究竟教會為何要定出如此令人難以理解的方法?

 原來根據聖經記載,耶穌復活的日子是猶太人的逾越節(即是猶太曆尼散月十四日)後的首個星期日。猶太曆屬於陰曆,尼散月十四日基本上就是春分後的滿月日的前一天。於是羅馬教會用了321日作為春分的估測(春分並不一定在321日,根據今天使用的格里曆曆法,它也可以在322日,根據舊的儒略曆曆法,更加可以差得非常遠)。綜合了以上眾多的考慮,教會最終作出了這規定。

這規則同時考慮到陰曆、陽曆及星期等的曆法概念,非常複雜。1800年,有「數學王子」之稱的德國數學家高斯就發明了一個演算法去計算不同年份中的復活節日期。


發明復活節演算法的數學家哥斯


演算法如下

1. a = 年份 (mod 19) (即年份除以19的餘數,下同)

2. b = 年份 (mod 4)

3. c = 年份 (mod 7)

4. k = 年份 / 100小於或等於年份除以100的最大整,下同)

5. p = (13 + 8) / 25

6. q = k / 4

7. M = 15 – p + k – q (mod 30)

8. N = 4 + k – q (mod 7)

9. d = 19a + M (mod 30)

10. e = 2b + 4c + 6d + N (mod 7)

11. 復活節的日子是3(22 + d + e)日或4(d + e – 9 )

12. 如果d = 29e = 6,那麼用426日去取代419

13. 如果d = 28e = 611M + 11 (mod 30) < 19,那麼用425日去取代418

 

我們試以2022年為例子去試用一下這演算法。

1. a = 2022 (mod 19) = 8

2. b = 2022 (mod 4) = 2

3. c = 2022 (mod 7) = 6

4. k = 2022 / 100 = 20

5. p = (13 + 8 x 20) / 25 = 6

6. q = 20 / 4 = 5

7. M = 15 – 6 + 20 – 5 (mod 30) = 24

8. N = 4 + k – q (mod 7) = 5

9. d = 19(8) + 24 (mod 30) = 26

10. e = 2(2) + 4(6) + 6(26) + 5 (mod 7) = 0

11. 因此復活節的日子是3(22 + 26 + 0)日或4(26 + 0 – 9 )日,即348日或417日。348日當然是不可能的,那復活節的日期應是417日。這也與我們的認知相符。

由於這演算法很複雜,史丹福好難在此詳盡解釋它的原理,甚至高斯自己也曾表示「不可能展示他是透過甚麼分析去得出這公式」。不過簡單來說,演算法分了兩部分,第一部分是估月亮的運行,第二部分是確實計算出月圓日後的星期日。

沒有留言:

張貼留言