原典
問開禧厯積年七百八十四萬八千一百八十三欲知推演之原調日法求朔餘朔率斗分嵗率嵗閏入元嵗入閏朔定骨閏泛骨閏縮紀率氣元率元閏元數及氣等率因率蔀率朔等數因數蔀數朔積年二十三事各幾何
——秦九韶《数书九章》天时类第六题
这道题说的是什么
《开禧历》是南宋的一部历法,其积年(从历法上元到当前年份的总年数)为7848183年。秦九韶要推算这部历法的各个基本参数。
这涉及到23个历法参数:
- 日法、朔余、朔率(朔望月相关)
- 斗分、岁率、岁闰(回归年相关)
- 气骨、朔骨、闰骨(节气与朔日关系)
- 纪率、气元率、元闰(周期参数)
- 等数、因数、蔀数(大衍术核心)
这是一个联立同余方程组的求解问题。
示意图

历法上元推算:通过大衍求一术,从23个参数中推算出历法的最初起点。
古人的算法
第一步:调日法求朔余
秦九韶用何承天的"调日法":
设日法为 F,朔望月余分为 r,则:
r=ca⋅F+b
其中 a,b,c 是强弱母子数。
对于《开禧历》,日法 F=16900,朔余 r=8967。
第二步:求朔率
朔率=29×F+r=29×16900+8967=490100+8967=499067
第三步:求斗分
斗分 = 岁实 - 365日的部分。
秦九韶用前朝观测数据:统天历冬至周日下24刻31分,得斗分4108。
第四步:求岁率
岁率=365×F+斗分=365×16900+4108=6168500+4108=6172608
第五步:求岁闰
岁闰=岁率−12×朔率=6172608−12×499067=6172608−5988804=183804
第六步:求等数、因数、蔀数
用大衍求一术:
gcd(4108,16900)=52(等数)
因数=144,蔀数=325
第七步:求入元岁
入元岁=蔀数气骨×因数(mod60)
经过复杂计算,得到入元岁 = 9180年。
第八步:求积年
积年=入元岁+朔积年=9180+7839000=7848180
答曰:积年七百八十四万八千一百八十年。
现代数学视角
秦九韶的方法本质上是同余方程组的求解。
设:
- M = 朔率(朔望月天数 × 日法)
- Y = 岁率(回归年天数 × 日法)
- C = 纪法(60甲子 × 日法)
我们需要找到最小正整数 N,使得:
N≡A(modM)
N≡B(modY)
N≡C(mod60)
这正是中国剩余定理的应用!
大衍求一术的本质
秦九韶的"求一术"就是在模运算下求乘法逆元:
给定 a 和 m,求 x 使得:
a⋅x≡1(modm)
用扩展欧几里得算法:
gcd(a,m)=a⋅x+m⋅y
当 gcd(a,m)=1 时,x 就是 a 模 m 的逆元。
历法上元的意义
"上元"是历法的理论起点:甲子年、甲子月、甲子日、冬至、朔日,所有周期同时重合的时刻。秦九韶通过解同余方程组,找到了这个理论上的起点。
跟高中数学的关系
本题对应高中数学的数论初步和同余理论。
思想延伸:大衍求一术是中国古代对世界数学的最大贡献之一。它比西方高斯的《算术研究》早了600多年。同余方程组的求解是现代密码学(如RSA算法)的基础。
运算练兵场:本题涉及大数运算、辗转相除法、同余运算,是对数论运算能力的综合训练。
综合题常客:高考中常以数学文化题形式出现,考查学生对古代数学方法的理解。
思考与拓展
-
用扩展欧几里得算法求 3x≡1(mod7) 的解。
-
如果朔率=499067,岁率=6172608,纪法=1014000,求满足 N≡0(mod499067), N≡0(mod6172608), N≡0(mod1014000) 的最小正整数 N。
-
为什么秦九韶要选择"上元"作为历法的起点?这在数学上有何意义?
-
查阅《授时历》,郭守敬是如何简化上元计算的?
一句话总结
秦九韶用大衍求一术解联立同余方程组,推算出历法上元积年——这是中国古代数论的最高成就。
— Y. · 2026-11-08