复活节的计算

复活节的计算（computus，本词即“计算”之意），是指对基督教重要节日复活节的日期算定方式，拉丁语全名为“computus paschalis”，东正教会则以“paschalion”称之。其规则是复活节定于春分后第一次满月之后的第一个星期日：这里所说的“春分”是以3月21日作为固定近似值；而“第一次满月”的日期并不完全依照实际天文现象、也不完全依照历法，而是由教会使用特定数学公式推算。此使复活节成为教会年历中的“移动庆日”，而有别于圣诞节等每年日期不变的“固定庆日”。

基督教发展初期，各地教会对复活节的日期已有争议，但大致依希伯来历以犹太人的逾越节推算；为了解决此争议，同时摆脱对希伯来历的依赖，西历325年召开的第一次尼西亚公会议决定另采机制来计算复活节的日期。这套算法之所以如此复杂，是因为教会希望将复活节的日期与逾越节相连结——基督徒相信，耶稣正是在逾越节期间受难死亡并在三日后复活的。

由于历史上数次的教会分裂，实际上复活节日期的计算，会随着基督教各宗派采用的历法而有所不同，东方教会主要依儒略历、西方教会则主要依格里历。格里历的出现，便是因为采用儒略历计算的春分日期愈来愈偏离3月21日，导致复活节的计算出现问题而改革制定的。

## 历史

复活节定于何日的问题，自2世纪的初期教会就已出现。当时有两个纪念耶稣复活的日期：以小亚细亚教会为主的东方教会，遵循耶稣的使徒的遗传，在犹太人的逾越节、即希伯来历尼散月十四日，纪念耶稣的受难和复活，表明逾越节羔羊预表耶稣（哥林多前书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

<image>

标记｜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 ExampleYear(Y) = 1961｜Worked ExampleYear(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