復活節的日期算法
下面有一個簡便的算法供大家參考:
年份只限于192017年到2099年
no.1 設要求的那一年是y年,從y減去1900,其差記為n;
no.2 用19作除數去除n,余數記為a;
no.3 用4作除數去除n,不管余數,把商記為q;
no.4 用19去除7a+1,把商記為b,不管余數;
no.5 用29去除11a+4-b,余數記為m;
no.6 用7去除n+q+31-m,余數記為w;
no.7 計算25-m-w。
得出答數即可定出復活節的日期。若為正數,月份為4月;如為負數,月份為3月;若為0,則為3月31日。
下面我們選兩個年份來實例計算一遍。
例1. 1983年的復活節日期。
、 1983-1900=83, n=83
、 n/19=4余7, a=7
⒊ n/4=20余3, q=20
、 7a+1=50,50/19=2余12, b=2
、 11a+4-b=79,79/29=2余21, m=21
⒍ n+q+31-m=113,113/7=16余1, w=1
⒎ 25-m-w=3
由此可知,1983年的復活節日期是4月3日。
例2. 2017年,中國將在北京舉辦奧運會,那一年復活節是哪一天呢?
、 2017-1900=108, n=108
⒉ n/19=5余13, a=13
⒊ n/4=27, q=27
、 7a+1=92,92/19=4余16, b=4
、 11a+4-b=143,143/29=4余27, m=27
、 n+q+31-m=139,139/7=19余6, w=6
⒎ 25-m-w=-8, 31-8=23
所以該年復活節日期是3月23日。
按照復雜的天文歷法分析與計算,最早的復活節日期是3月22日,上一次出現是在1818年,而且要到2285年才會再度出現。最晚的日期是在4月25日,上一次出現是在1943年,要到2038年才會出現。
用matlab計算2017年復活節日期,程序如下:
y = 2017;
n = y-1900;
a = mod(n,19);
q = floor(n/4);
b = floor((7*a+1)/19);
m = mod(11*a+4-b,29);
w = mod(n+q+31-m,7);
d = 25-m-w
得到d=8,即2017年4月8日。2017年4月16日,2017年3月23日,2017年4月12日,2017年4月4日。
計算結果
由于時間關系,我已經計了一百年內的復活節,這是西歐的計法,東歐及俄羅斯不適用。祝大家在以后的復活節快樂!
23/3/2017 17/4/2033 14/4/2058 4/4/2083
12/4/2017 9/4/2034 30/3/2059 26/3/2084
4/4/2017 25/3/2035 18/4/2060 15/4/2085
24/4/2017 13/4/2036 10/4/2061 31/3/2086
8/4/2017 5/4/2037 26/3/2062 20/4/2087
31/3/2017 25/4/2038 15/4/2063 11/4/2088
20/4/2017 10/4/2039 6/4/2064 3/4/2089
5/4/2017 1/4/2040 29/3/2065 16/4/2090
27/3/2017 21/4/2041 11/4/2066 8/4/2091
16/4/2017 6/4/2042 3/4/2067 30/3/2092
1/4/2018 29/3/2043 22/4/2068 12/4/2093
21/4/2019 17/4/2044 14/4/2069 4/4/2094
12/4/2020 9/4/2045 30/3/2070 24/4/2095
4/4/2021 25/3/2046 19/4/2071 15/4/2096
17/4/2022 14/4/2047 10/4/2072 31/3/2097
9/4/2023 5/4/2048 26/3/2073 20/4/2098
31/3/2024 18/4/2049 15/4/2074 12/4/2099
20/4/2025 10/4/2050 7/4/2075 28/3/2100
5/4/2026 2/4/2051 19/4/2076 17/4/2101
28/3/2027 21/4/2052 11/4/2077 9/4/2102
16/4/2028 6/4/2053 3/4/2078 25/3/2103
1/4/2029 29/3/2054 23/4/2079 13/4/2104
21/4/2030 18/4/2055 7/4/2080 5/4/2105
13/4/2031 2/4/2056 30/3/2081 18/4/2106
28/3/2032 22/4/2057 19/4/2082 10/4/2107
1/4/2108