复活节的计算

复活节的计算computus拉丁文“计算”之意),其规则是复活节的日期是在3月21日当日或之后的满月日后的首个星期日。天主教会设计了方法去定一个“天主教的月”,而不像犹太人般观察真正的月亮。

一个来自瑞典的表,用来计算1140年至1671年的复活节日期

历史

基督教在二世纪开始,出现两个纪念耶稣复活的日期:东方的小亚细亚教会,遵循耶稣的使徒的遗传,于是在犹太人的逾越节,即是犹太历尼散月十四日,纪念耶稣的受难和复活,表明逾越节羔羊预表耶稣(哥林多前书5:7)。至于以罗马教会为代表的西方教会,就在逾越节后的星期日纪念耶稣的复活。从二世纪后期开始,这项分歧引致教会间很大纷争。后来在325年第一次尼西亚会议,决定不按犹太历法,而按照春分月圆,自行计算出复活节日期(但是所谓“春分”是固定于西历3月21日)。此后教会为了定出从西历计算月亮周期的方法,不依赖于天文观察,各地先后提出多种方法,历时数个世纪,才定出各地教会共用的计算表册和方法。

理论

由于犹太历是阴历,基督教会舍弃依从犹太历的传统时,便造出自己的阴历取代。每29或30日合为一个阴历月(如果包含2月29日则有31日),在3月结束的阴历月有30日,在4月结束者有29日,如此长短相间。12个阴历月比阳历年短11日,两者的差距称为闰余epact),阳历日期加上闰余得出阴历月的日期。闰余每年增加11日,达到30日或以上则减去30,设一个30日的闰月。每19年的默冬周期应刚好等于235个阴历月,闰余应以19年为一周期,但是19年的闰余累积为29日,于是在儒略历中将最后一年7月1日开始的阴历月由本来30日减去1日,又在19年中加入7个各30日的闰月,分别开始于在第2年12月3日,第5年9月2日,第8年3月6日,第10年12月4日,第13年11月2日,第16年8月2日,第19年3月5日。一年在默冬周期中的位置称为黄金数,算式是年份除以19的余数加1。阴历月第14日定为形式上的望日。望日在3月21日或之后的第一个阴历月是复活节月,复活节是此阴历月第14日之后第一个周日。

表列法

格里历

由于1582年格里历改革主要原因,在于当时的复活节计算法已远离真正的春分和满月,在推出新历法时也推行了新的复活节计算法。将全年365日列出,再用递减的罗马数字标记各日,1月1日标记为“*”(0或30),1月2日为“xxix”(29),直到“i”,然后再重复至年末,但每偶数周期只有29日,需将标记为“xxv”的日子也标为“xxiv”。最后每个30日周期中将标记为“xxv”的日子加上标记“25”,每个29日周期中将标为“xxvi”的日子加上标记“25”。然后用“A”至“G”为每日标记,一年第一个周日的字母是这年的主日字母,例如如果1月5日是星期日,这年的主日字母是“E”,但是闰年有两个主日字母,第一个是1至2月,第二个(提前一字母)是3月以后。每个阴历月的朔日是和闰余相同的罗马数字日子。然而,由于默冬周期中,相隔11年的两个年份闰余相差1日,如果这两年闰余分别是24和25,那么这两年的朔日都会一样,显得不太优美,因此黄金数大于11而闰余是25的年份,朔日改在标记为“25”的日子。格里历每400年减去3个闰年,但是为免影响默冬周期,因此这三年将闰余减1以修正(solar equation,equation按古代意思解作修正差异);不过,19个未改正的儒略年比235个朔望月略长,每310年差距累积到一日,故此每2500(格里)年中,须8次将闰余加1以修正(lunar equation),修正在世纪年进行,每两次修正相隔300年,但每8次修正后隔400年再开始,第一次在1800年,下一次在2100年。这两种修正有时互相抵消,如1800年和2100年即是。格里历改革后黄金数方法被闰余方法取代,但可以编制出两者关系的简化表格,有效期由一至三个世纪不等。以下的闰余表对1900年至2199年适用。黄金数的算法为年份除以19的余数再加1,如2014年除以19的余数为0,故此2014黄金数是1。

黄金数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
闰余 29 10 21 2 13 24 5 16 27 8 19 * 11 22 3 14 25 6 17
 
格里历完整的5,700,000年周期复活节日期的分布
标记 3月 主日字母 4月 主日字母
* 1 D
xxix 2 E 1 G
xxviii 3 F 2 A
xxvii 4 G 3 B
xxvi 5 A 4 C
25 6 B
xxv 5 D
xxiv 7 C
xxiii 8 D 6 E
xxii 9 E 7 F
xxi 10 F 8 G
xx 11 G 9 A
xix 12 A 10 B
xviii 13 B 11 C
xvii 14 C 12 D
xvi 15 D 13 E
xv 16 E 14 F
xiv 17 F 15 G
xiii 18 G 16 A
xii 19 A 17 B
xi 20 B 18 C
x 21 C 19 D
ix 22 D 20 E
viii 23 E 21 F
vii 24 F 22 G
vi 25 G 23 A
v 26 A 24 B
iv 27 B 25 C
iii 28 C 26 D
ii 29 D 27 E
i 30 E 28 F
* 31 F 29 G
xxix 30 A

举例:2019年黄金数是6,闰余是24,则标记为“xxiv”日子是朔日,3月7日和4月5日为朔日,而望日为朔日的13日后,即3月20日和4月18日。3月21日或之后的望日是4月18日。这一日之后(不包括当日)的周日是复活节。2019年的主日字母是“F”,所以4月21日是复活节。

第偶数个阴历月只有29日,有一日需有两个闰余标记,而选择移动“xxv/25”的理由可能是:在闰余为24的年份,如果3月7日开始的阴历月有30日,复活节月便在4月6日开始,望日在4月19日,又假设该日是周日,复活节便在下周日4月26日。但是教会规定复活节不晚于4月25日,所以4月5日便有两个标记“xxv”“xxiv”。因此格里历中复活节最多出现在4月19日,约3.87%,最少出现在3月22日,约0.48%。

儒略历

格里历改革前西方教会使用的方法,也是东方正教会现今使用的方法,采用未改正的默冬周期,每周期开始闰余都是0日,因此复活节望日只可能有19个。因为儒略历不作出像格里历的改正,每过一千年,教会阴历的望日日期会比实际的望日推迟三日多,故此现时约有一半东正教的复活节比西方教会晚了一周。又由于儒略历在1900年至2099年间比格里历落后13日,格里历的复活节望日不时在儒略历3月21日之前,使东正教的复活节比西方教会晚了四至五周。

各地教会从4世纪开始渐渐采用此方法,931年最后一个英格兰修道院也采用。在采用此方法前各地用其他方法定出复活节日期,相差可以达至五周。

下表是自从931年起儒略历的复活节望日日期:

黄金数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
复活节望日 4月5日 3月25日 4月13日 4月2日 3月22日 4月10日 3月30日 4月18日 4月7日 3月27日 4月15日 4月4日 3月24日 4月12日 4月1日 3月21日 4月9日 3月29日 4月17日

例子:1573年的黄金数是16,查表得到复活节望日是3月21日。从星期表得到该日是周六,因此复活节是其后的周日3月22日。

算法

高斯算法

这个方法由以数学家高斯命名。

用Y表示年份,mod运算指整数除法的余数(例如13 mod 5 = 3,详细请参见同余)。

东正教会所用的儒略历取M=15,N=6,西方教会所用的公历的取法参见下表:

  年份      M   N
1583-1699  22   2
1700-1799  23   3
1800-1899  23   4
1900-2099  24   5
2100-2199  24   6
2200-2299  25   0
  • a = Y mod 19
  • b = Y mod 4
  • c = Y mod 7
  • d = (19a + M) mod 30
  • e = (2b + 4c + 6d + N) mod 7

若d+e < 10则复活节在3月(d+e+22)日,反则在4月(d+e-9)日,除了两个特殊情况:

  • 若公式算出的日期是4月26日,复活节在4月19日;
  • 若公式算出的日期是4月25日,同时d=28、e=6和a>10,复活节应在4月18日。

Meeus/Jones/Butcher算法(公历)

Jean Meeus在他的书《天文算法》(Astronomical Algorithms,1991年)记载了这个计算公历中的复活节日期的方法,并指这个方法是来自Spencer Jones的书《一般天文学》(General Astronomy,1922年)和《英国天文学会期刊》(Journal of the Brithish Astronomical Association,1977年),后者指方法是来自Butcher's Ecclesiastical Calendar(1876年)。

这个方法的优点是不用任何表也没有例外的情况。注意这里用的是整数除法,7/2=3非3.5。

Worked Example
Year(Y) = 1961
Worked Example
Year(Y) = 2000
a = Y mod 19 1961 mod 19 = 4 2000 mod 19 = 5
b = Y / 100 1961 / 100 = 19 2000 / 100 = 20
c = Y mod 100 1961 mod 100 = 61 2000 mod 100 = 0
d = b / 4 19 / 4 = 4 20 / 4 = 5
e = b mod 4 19 mod 4 = 3 20 mod 4 = 0
f = (b + 8) / 25 (19 + 8) / 25 = 1 (20 + 8) / 25 = 1
g = (b - f + 1) / 3 (19 - 1 + 1) / 3 = 6 (20 - 1 + 1) / 3 = 6
h = (19 * a + b - d - g + 15) mod 30 (19 * 4 + 19 - 4 - 6 + 15) mod 30 = 10 (19 * 5 + 20 - 5 - 6 + 15) mod 30 = 29
i = c / 4 61 / 4 = 15 0 / 4 = 0
k = c mod 4 61 mod 4 = 1 0 mod 4 = 0
l = (32 + 2 * e + 2 * i - h - k) mod 7 (32 + 2 * 3 + 2 * 15 - 10 - 1) mod 7 = 1 (32 + 2 * 0 + 2 * 0 - 29 - 0) mod 7 = 3
m = (a + 11 * h + 22 * l) / 451 (4 + 11 * 10 + 22 * 1) / 451 = 0 (5 + 11 * 29 + 22 * 3) / 451 = 0
month = (h + l - 7 * m + 114) / 31 (10 + 1 - 7 * 0 + 114) / 31 = 4 (April) (29 + 3 - 7 * 0 + 114) / 31 = 4 (April)
day = ((h + l - 7 * m + 114) mod 31) + 1 (10 + 1 - 7 * 0 + 114) mod 31 + 1 = 2 (29 + 3 - 7 * 0 + 114) mod 31 + 1 = 23
1961年4月2日 2000年4月23日

Meeus算法(儒略历)

在《天文算法》,使用了以下公式计算儒略历中的复活节日期:(注意这里用的是整数除法,7/2=3非3.5。)

  • a = Y mod 4
  • b = Y mod 7
  • c = Y mod 19
  • d = (19*c + 15) mod 30
  • e = (2*a + 4*b - d + 34) mod 7
  • 月 = (d+e+114) / 31
  • 日 = ((d+e+114) mod 31) + 1