数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
查看: 1504|回复: 3

从 60 年一甲子说起

[复制链接]
发表于 2022-3-28 19:13 | 显示全部楼层 |阅读模式
从 60 年一甲子说起

作者 | 刘瑞祥

来源 | 说短论长

我在高中学完排列组合后曾经思考过这样一个问题:天干一共是 10 个字:甲乙丙丁戊己庚辛壬癸,地支是 12 个字:子丑寅卯辰巳午未申酉戌亥。那么按照排列的结果,一共有 120 种结合方式,但为什么 60 年一个甲子?



后来当然我是明白了,原因在于天干地支必须按顺序循环,不能随意结合。比如“甲子”“乙丑”等等是合法的,而“甲丑”“乙子”等等则是非法的。换言之,奇数位置的天干只能和奇数位置的地支结合,偶数位置的天干只能和偶数位置的地支结合。这里的道理在于,10 和 12 的最大公约数是 2 ,所以“合法”的结合方式必须是 10 和 12 的乘积除以 2 ,即二者的最小公倍数。

下面我设计一种操作来帮助大家理解:取一些长度为 10 里面的纸张,每隔 1 厘米画一条线,然后每张纸都按顺序写上从甲到癸等天干字样,另外取一些长度 12 里面的纸,也是每隔 1 厘米画一条线,每张纸按顺序写上从子到亥等地支字样。然后两种纸分别首尾相接排成两排,显然 6 张代表天干的纸长度和 5 张代表地支的纸相同。如果两种纸起点位置相同又朝一个方向铺排的话,那么可以看到:“甲”永远不可能和“丑”并排,“乙”永远不能和“子”并排,最后能出现的结合方式正好是 60 种。

下面这种操作是错误的:弄两个罐子,其中一个里作好 10 个阄,分别写上天干字样,另外一个里有 12 个写上地支字样的阄。每次分别从两个罐子里各抓一个结合在一起,然后放回再重新抓。这样一直操作下去并且把每次结果记录下来,显然有 120 种可能性。

我们还可以这样设想一下:如果天干只有 2 个(设为甲乙)而地支有 4 个(设为子丑寅卯),则合法的组合只有 4 种,决不可能是 8(2 乘 4)种:即甲子、乙丑、甲寅、乙卯。但如果天干有 3 个而地支有 4 个,那么合法的组合就是 12 种了,恰好等于二者的乘积。类似的,如果天干有 9 个而地支有 12 个,则合法的结合方式只有 36 种,尽管 9 和 12 的乘积是 108 。

下面附上现实生活中全部合法的组合:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2022-3-28 22:30 | 显示全部楼层
有了合成方法论,或许可以用方程的解组数来解释这种“组合方式”,把文字用数字代替,会得到同样的答案,就像不对称合成那样。
回复 支持 反对

使用道具 举报

发表于 2022-3-30 15:31 | 显示全部楼层
天干地支计算方法:
首先把天干'甲','乙','丙','丁','戊','己','庚','辛','壬','癸'分别对应1-10十个序号,
再把地支'寅','卯','辰','巳','午','未','申','酉','戌','亥','子','丑'对应1-12的序号。
年份个位数-3 所得的数字即是天干的序号;
(年份+7)÷12的余数所得的数字即是地支的序号。
回复 支持 反对

使用道具 举报

发表于 2022-3-30 15:35 | 显示全部楼层
本帖最后由 Nicolas2050 于 2022-3-30 15:41 编辑

#Python3.9计算天干地支完整代码,带注释

Heavenly_Stems = ['甲','乙','丙','丁','戊','己','庚','辛','壬','癸']   #10天干列表

Earthly_Branches = ['寅','卯','辰','巳','午','未','申','酉','戌','亥','子','丑']   #12地支列表

animals_12 = ['虎','兔','龙','蛇','马','羊','猴','鸡','狗','猪','鼠','牛']   #12生肖列表

year = int(input('请输入你要计算的年份:'))   #获取用户输入的年份

year_1 = year % 10   #获取年份的个位数

year_H_S = Heavenly_Stems[year_1 - 3 - 1]   #计算天干,“year_1-3”是计算天干的序号,因为Python列表[0]指的是列表的第1项,为了消除此差异需要再“-1”

year_2 = (year + 7) % 12   #获取地支的序号(年份加7再除以12的余数)

if year_2 == 0:   #如果地支序号(余数)为零,就对应列表的第12项[11]

    year_E_B = Earthly_Branches[11]

    year_animal = animals_12[11]   #十二生肖的第12项[11]

elif year_2 != 0:   #如果地支序号不为零,就输出列表中对应的项

    year_E_B = Earthly_Branches[year_2 - 1]

    year_animal = animals_12[year_2 - 1]   #年份对应的生肖

print(str(year) + '年是',year_H_S + year_E_B,year_animal,'年')   #打印



---------------------------
请输入你要计算的年份:2034
2034年是 甲寅 虎 年
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2024-4-28 08:25 , Processed in 0.092773 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表