赞
踩
干支纪年,是指中国纪年历法,自上古以来就一直使用的纪年方法。干支是天干和地支的总称。把干支顺序相配正好六十为一周,周而复始,循环记录,这就是俗称的“干支表”。干支纪年与公元纪年可以相互转换。公元年转化为干支年比较好算,干支年转化为公元年目前的流行方法是查表法,先根据干支,查出在干支表中所出的年次,再根据干支年和公元年的关系推算公元年?那么有没有不用查表,就能根据干支利用公式快速计算出干支所处年次的方法呢?
根据公元年数推算这一年的干支,算法比较简单。计算公式:
T=(AD-3) MOD 10 式(1)
B=(AD-3) MOD 12 式(2)
式中:T,是Trunk的首字母,代表天干序号;B是Branch的首字母,代表地支序号。AD是Anno Domini的缩写,代表公元;MOD是求余运算符。
比如今年是2022年,根据上述公式,可以推出T=9,B=3。根据表1,天干序号为9的是“壬”。根据表2,地支序号为3的是“寅”,所以2022年是壬寅年。注意:如果T=0,相当于余10,对应“癸”,如果B=0,相当于余12,对应“亥”。
天干 | 序号 |
甲 | 1 |
乙 | 2 |
丙 | 3 |
丁 | 4 |
戊 | 5 |
己 | 6 |
庚 | 7 |
辛 | 8 |
壬 | 9 |
癸 | 10 |
地支 | 序号 |
子 | 1 |
丑 | 2 |
寅 | 3 |
卯 | 4 |
辰 | 5 |
巳 | 6 |
午 | 7 |
未 | 8 |
申 | 9 |
酉 | 10 |
戌 | 11 |
亥 | 12 |
式(1)、(2)中的减3是怎么来的呢?先看表3,一个一个周期60年的干支年次表,从表中可以看出,甲子是一个周期的第1年,癸亥年第60年,而辛酉年是第58年。而公元1年好是我国的辛酉年,是干支年的第58年。所以,往后推3年就到了下一个干支周期的干支1年甲子年,而这一年是公元4年,所以公元4年-干支1年=3年。这就是要减3的原因。
干支年次(TB) | 天干(T) | 地支(B) |
1 | 甲 | 子 |
2 | 乙 | 丑 |
3 | 丙 | 寅 |
4 | 丁 | 卯 |
5 | 戊 | 辰 |
6 | 己 | 巳 |
7 | 庚 | 午 |
8 | 辛 | 未 |
9 | 壬 | 申 |
10 | 癸 | 酉 |
11 | 甲 | 戌 |
12 | 乙 | 亥 |
13 | 丙 | 子 |
14 | 丁 | 丑 |
15 | 戊 | 寅 |
16 | 己 | 卯 |
17 | 庚 | 辰 |
18 | 辛 | 巳 |
19 | 壬 | 午 |
20 | 癸 | 未 |
21 | 甲 | 申 |
22 | 乙 | 酉 |
23 | 丙 | 戌 |
24 | 丁 | 亥 |
25 | 戊 | 子 |
26 | 己 | 丑 |
27 | 庚 | 寅 |
28 | 辛 | 卯 |
29 | 壬 | 辰 |
30 | 癸 | 巳 |
31 | 甲 | 午 |
32 | 乙 | 未 |
33 | 丙 | 申 |
34 | 丁 | 酉 |
35 | 戊 | 戌 |
36 | 己 | 亥 |
37 | 庚 | 子 |
38 | 辛 | 丑 |
39 | 壬 | 寅 |
40 | 癸 | 卯 |
41 | 甲 | 辰 |
42 | 乙 | 巳 |
43 | 丙 | 午 |
44 | 丁 | 未 |
45 | 戊 | 申 |
46 | 己 | 酉 |
47 | 庚 | 戌 |
48 | 辛 | 亥 |
49 | 壬 | 子 |
50 | 癸 | 丑 |
51 | 甲 | 寅 |
52 | 乙 | 卯 |
53 | 丙 | 辰 |
54 | 丁 | 巳 |
55 | 戊 | 午 |
56 | 己 | 未 |
57 | 庚 | 申 |
58 | 辛 | 酉 |
59 | 壬 | 戌 |
60 | 癸 | 亥 |
那么如果已经知道干支年,那么能不能反推出公元年呢。比如,想知道“癸丑”年都对应的是公元多少年?网上有好多方法,但大部分都是查表法,从表3查出一个周期中查出“癸丑”年是第50年,然后再利用公式:50+3+n*60,推算出“癸丑”年所有的公元年份,如表4所示。
n | 公元年 |
0 | 53 |
2 | 173 |
3 | 233 |
4 | 293 |
5 | 353 |
6 | 413 |
7 | 473 |
8 | 533 |
9 | 593 |
10 | 653 |
11 | 713 |
12 | 773 |
13 | 833 |
14 | 893 |
15 | 953 |
16 | 1013 |
17 | 1073 |
18 | 1133 |
19 | 1193 |
20 | 1253 |
21 | 1313 |
22 | 1373 |
23 | 1433 |
24 | 1493 |
25 | 1553 |
26 | 1613 |
27 | 1673 |
28 | 1733 |
29 | 1793 |
30 | 1853 |
31 | 1913 |
32 | 1973 |
33 | 2033 |
那么有没有更快速的一种方法,不用查表,就可以根据干支快速地计算出一个周期中,这对干支对应的年次呢?下边进行逐步探讨。
如果把表3中的天干和地支都由表1、表2中的序号来代替(天干的10用0代替,地支的12用0代替),那么就得到表5。发现这张表得每一行就是干支年次分别对10和12求余的结果。这样就把干支纪年表转化成了1至60对10、12求余的余数表,表中,TB代表干支年次,R10代表干支年次TB除以10的余数,R12代表TB除以12的余数。
干支年次(TB) | R10 | R12 |
1 | 1 | 1 |
2 | 2 | 2 |
3 | 3 | 3 |
4 | 4 | 4 |
5 | 5 | 5 |
6 | 6 | 6 |
7 | 7 | 7 |
8 | 8 | 8 |
9 | 9 | 9 |
10 | 0 | 10 |
11 | 1 | 11 |
12 | 2 | 0 |
13 | 3 | 1 |
14 | 4 | 2 |
15 | 5 | 3 |
16 | 6 | 4 |
17 | 7 | 5 |
18 | 8 | 6 |
19 | 9 | 7 |
20 | 0 | 8 |
21 | 1 | 9 |
22 | 2 | 10 |
23 | 3 | 11 |
24 | 4 | 0 |
25 | 5 | 1 |
26 | 6 | 2 |
27 | 7 | 3 |
28 | 8 | 4 |
29 | 9 | 5 |
30 | 0 | 6 |
31 | 1 | 7 |
32 | 2 | 8 |
33 | 3 | 9 |
34 | 4 | 10 |
35 | 5 | 11 |
36 | 6 | 0 |
37 | 7 | 1 |
38 | 8 | 2 |
39 | 9 | 3 |
40 | 0 | 4 |
41 | 1 | 5 |
42 | 2 | 6 |
43 | 3 | 7 |
44 | 4 | 8 |
45 | 5 | 9 |
46 | 6 | 10 |
47 | 7 | 11 |
48 | 8 | 0 |
49 | 9 | 1 |
50 | 0 | 2 |
51 | 1 | 3 |
52 | 2 | 4 |
53 | 3 | 5 |
54 | 4 | 6 |
55 | 5 | 7 |
56 | 6 | 8 |
57 | 7 | 9 |
58 | 8 | 10 |
59 | 9 | 11 |
60 | 0 | 0 |
在文章用列表法分析1500年前南北朝时期的“奥数”题(以下简称《列表法》)中,给出了用列表法推算《孙子算经》“物不知数”3、5、7三个数乘率的方法。这样对于每一组余数,就可以根据公式计算出相对应的那个被除数。
那么同理,能不能也找出10、12的乘率K10、K12,确定一个公式,由一组干支的序号也可以快速推算出干支年次,然后计算出相应的公元年呢?
我们还用列表法尝试一下,从表5中,搜索当R10为0的情况,如表6所示。
干支年次(TB) | R10 | R12 |
10 | 0 | 10 |
20 | 0 | 8 |
30 | 0 | 6 |
40 | 0 | 4 |
50 | 0 | 2 |
60 | 0 | 0 |
从表中可以看到,,但R10=0时R12只有6个,从10依次递减2,而R12本身应该有12个,为什么会少了一半呢?看表5,对于任意一个天干年次TB,其对应的R10和R12要么都是奇数,要么都是偶数,没有奇数和偶数的组合,当R10固定时,R12变化的幅度最小是2。
也就是说,要想让R12实现变化步幅是1,那么R10也需要变换1步,这样才能实现奇数对奇数、偶数对偶数的搭配。
实现这个目的的最简单的方法就是R10增加1,同时R12也增加1,但这种变化在R10、R12都小于10时R10-R12=0,当超过9之后,R10-R12=2,当超过19以后,R10-R12=4,差值发生了跳变,不是连续的,所以这个规律不适用。
那么实现R10、R12奇数对奇数、偶数对偶数的方法还有一种,就是一个增加1步,一个减少1步,相对运动是2步,那么也可以实现奇数对奇数、偶数对偶数的目的。
那么哪个余数增加,哪个余数减少呢?从表6中可以看出,随着干支年次的增加,R12的余数是递减的,也就是逆增长,所以确定这个余数是减少的。那么根据 《列表法》给出的爬爬虫定律1,先找到除数12的余数0在第6行,反向移动,找到它上边的2在第5行,第6行干支年次是60,第5行干支年次是50,又因为步伐是2,所以R12的乘率K12=(50-60)/2=-5。
因为确定除R12是减1变化,那么R10就是加1变化。再从表5中,搜索当除数R12=0的情况,如表7所示。从表中可以看到,搜出5行,从第1行到第4行,R10从2依次递增到8,而0在最后一行,说明0之后的那个2在下一个周期的第一行,也就是对应的干支年次为12+60=72。所以R10的乘率K10=(72-60)÷2=6。
干支年次(TB) | R10 | R12 |
12 | 2 | 0 |
24 | 4 | 0 |
36 | 6 | 0 |
48 | 8 | 0 |
60 | 0 | 0 |
根据以上计算出的乘率,我们能确定根据干支来计算干支年次的公式为:
TB=6*R10-5*R12±n*60 式(3)
注意:公式中,R10代表干支年次除10的余数,R12代表干支年次除12的余数,n代表计算的结果加上或减去n倍60,直到计算结果在[1,60]为止。由于R12是减1变化,所以可能出现计算结果小于0的情况。
我们把所有的1到60除10、除12对应的所有余数,代入公式(3)来计算一下结果。
验证结果如表8所示,当n=0时的计算结果都在(-60,60)之间,所以只需要把小于1的再加一次60就能把全部结果换算至[1,60]之间,见AD(n=1)列,所有计算结果与干支年次完全一致,这就验证了公式的正确性。
干支年次 | R10 | R12 | TB(n=0) | TB(n=1) |
1 | 1 | 1 | 1 | 1 |
2 | 2 | 2 | 2 | 2 |
3 | 3 | 3 | 3 | 3 |
4 | 4 | 4 | 4 | 4 |
5 | 5 | 5 | 5 | 5 |
6 | 6 | 6 | 6 | 6 |
7 | 7 | 7 | 7 | 7 |
8 | 8 | 8 | 8 | 8 |
9 | 9 | 9 | 9 | 9 |
10 | 0 | 10 | -50 | 10 |
11 | 1 | 11 | -49 | 11 |
12 | 2 | 0 | 12 | 12 |
13 | 3 | 1 | 13 | 13 |
14 | 4 | 2 | 14 | 14 |
15 | 5 | 3 | 15 | 15 |
16 | 6 | 4 | 16 | 16 |
17 | 7 | 5 | 17 | 17 |
18 | 8 | 6 | 18 | 18 |
19 | 9 | 7 | 19 | 19 |
20 | 0 | 8 | -40 | 20 |
21 | 1 | 9 | -39 | 21 |
22 | 2 | 10 | -38 | 22 |
23 | 3 | 11 | -37 | 23 |
24 | 4 | 0 | 24 | 24 |
25 | 5 | 1 | 25 | 25 |
26 | 6 | 2 | 26 | 26 |
27 | 7 | 3 | 27 | 27 |
28 | 8 | 4 | 28 | 28 |
29 | 9 | 5 | 29 | 29 |
30 | 0 | 6 | -30 | 30 |
31 | 1 | 7 | -29 | 31 |
32 | 2 | 8 | -28 | 32 |
33 | 3 | 9 | -27 | 33 |
34 | 4 | 10 | -26 | 34 |
35 | 5 | 11 | -25 | 35 |
36 | 6 | 0 | 36 | 36 |
37 | 7 | 1 | 37 | 37 |
38 | 8 | 2 | 38 | 38 |
39 | 9 | 3 | 39 | 39 |
40 | 0 | 4 | -20 | 40 |
41 | 1 | 5 | -19 | 41 |
42 | 2 | 6 | -18 | 42 |
43 | 3 | 7 | -17 | 43 |
44 | 4 | 8 | -16 | 44 |
45 | 5 | 9 | -15 | 45 |
46 | 6 | 10 | -14 | 46 |
47 | 7 | 11 | -13 | 47 |
48 | 8 | 0 | 48 | 48 |
49 | 9 | 1 | 49 | 49 |
50 | 0 | 2 | -10 | 50 |
51 | 1 | 3 | -9 | 51 |
52 | 2 | 4 | -8 | 52 |
53 | 3 | 5 | -7 | 53 |
54 | 4 | 6 | -6 | 54 |
55 | 5 | 7 | -5 | 55 |
56 | 6 | 8 | -4 | 56 |
57 | 7 | 9 | -3 | 57 |
58 | 8 | 10 | -2 | 58 |
59 | 9 | 11 | -1 | 59 |
60 | 0 | 0 | 0 | 60 |
(6)干支年变换公元年
那么有了一个周期内的计算公式,就可以根据干支计算出所有的公元年份了,计算公式为:
AD=TB+3+m*60 式(4)
式中,AD代表公元年,TB代表计算出的一周期内的干支年,R10代表天干所对应序号,R12代表地支所对应序号,注意R10可以等于0,也可以等于10,R12可以等于0,也可以等于12,不影响计算结果。
举例验证:以“壬寅”年为例,反推。查表1可知,R10=9;查表2可知,R12=3;代入公式(3),得:
TB=6*9-5*3=54-15=39年
那么再代入公式(4)依次加60,可计算出至2022年所有的壬寅年,如表9所示。
n | 公元年 |
0 | 42 |
2 | 162 |
3 | 222 |
4 | 282 |
5 | 342 |
6 | 402 |
7 | 462 |
8 | 522 |
9 | 582 |
10 | 642 |
11 | 702 |
12 | 762 |
13 | 822 |
14 | 882 |
15 | 942 |
16 | 1002 |
17 | 1062 |
18 | 1122 |
19 | 1182 |
20 | 1242 |
21 | 1302 |
22 | 1362 |
23 | 1422 |
24 | 1482 |
25 | 1542 |
26 | 1602 |
27 | 1662 |
28 | 1722 |
29 | 1782 |
30 | 1842 |
31 | 1902 |
32 | 1962 |
33 | 2022 |
把表9与上图查到的资料对比,验证了结果完全正确,说明本文的变换公式
TB=6*R10-5*R12±n*60 式(3)
AD=TB+3+m*60 式(4)
正确,变换方法可行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。