利用干支年反推公元年份的计算公式推导

利用干支年反推公元年份的计算公式推导干支纪年 是指中国纪年历法 自上古以来就一直使用的纪年方法

大家好,欢迎来到IT知识分享网。

干支纪年,是指中国纪年历法,自上古以来就一直使用的纪年方法。干支是天干和地支的总称。把干支顺序相配正好六十为一周,周而复始,循环记录,这就是俗称的“干支表”。干支纪年与公元纪年可以相互转换。公元年转化为干支年比较好算,干支年转化为公元年目前的流行方法是查表法,先根据干支,查出在干支表中所出的年次,再根据干支年和公元年的关系推算公元年?那么有没有不用查表,就能根据干支利用公式快速计算出干支所处年次的方法呢?

利用干支年反推公元年份的计算公式推导

一、公元年转化为干支年

根据公元年数推算这一年的干支,算法比较简单。计算公式:

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 天干序号表
天干 序号
1
2
3
4
5
6
7
8
9
10
表2 地支序号表
地支 序号
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的原因。

表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

二、干支年转换为公元年

1、查表法

那么如果已经知道干支年,那么能不能反推出公元年呢。比如,想知道“癸丑”年都对应的是公元多少年?网上有好多方法,但大部分都是查表法,从表3查出一个周期中查出“癸丑”年是第50年,然后再利用公式:50+3+n*60,推算出“癸丑”年所有的公元年份,如表4所示。

表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

2、公式法

那么有没有更快速的一种方法,不用查表,就可以根据干支快速地计算出一个周期中,这对干支对应的年次呢?下边进行逐步探讨。

(1)数字化处理

如果把表3中的天干和地支都由表1、表2中的序号来代替(天干的10用0代替,地支的12用0代替),那么就得到表5。发现这张表得每一行就是干支年次分别对10和12求余的结果。这样就把干支纪年表转化成了1至60对10、12求余的余数表,表中,TB代表干支年次,R10代表干支年次TB除以10的余数,R12代表TB除以12的余数。

表5 干支年次除以10、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

(2)思路来源

在文章用列表法分析1500年前南北朝时期的“奥数”题(以下简称《列表法》)中,给出了用列表法推算《孙子算经》“物不知数”3、5、7三个数乘率的方法。这样对于每一组余数,就可以根据公式计算出相对应的那个被除数。

那么同理,能不能也找出10、12的乘率K10、K12,确定一个公式,由一组干支的序号也可以快速推算出干支年次,然后计算出相应的公元年呢?

(3)K12的确定

我们还用列表法尝试一下,从表5中,搜索当R10为0的情况,如表6所示。

表6 R10=0时R12对应干支年次表
干支年次(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

(3)K10的确定

因为确定除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

表7 R12=0时R10对应干支年次表
干支年次(TB) R10 R12
12 2 0
24 4 0
36 6 0
48 8 0
60 0 0

(4)干支年次计算公式

根据以上计算出的乘率,我们能确定根据干支来计算干支年次的公式为:

TB=6*R10-5*R12±n*60     式(3)

注意:公式中,R10代表干支年次除10的余数,R12代表干支年次除12的余数,n代表计算的结果加上或减去n倍60,直到计算结果在[1,60]为止。由于R12是减1变化,所以可能出现计算结果小于0的情况。

(5)验证公式

我们把所有的1到60除10、除12对应的所有余数,代入公式(3)来计算一下结果。

验证结果如表8所示,当n=0时的计算结果都在(-60,60)之间,所以只需要把小于1的再加一次60就能把全部结果换算至[1,60]之间,见AD(n=1)列,所有计算结果与干支年次完全一致,这就验证了公式的正确性。

表8 验证结果表
干支年次 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所示。

表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) 

正确,变换方法可行。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/127538.html

(0)
上一篇 2025-09-06 20:20
下一篇 2025-09-06 20:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信