跳转到内容

第五讲:东方数论的智慧——中国与印度

第五讲:东方数论的智慧——中国与印度

Section titled “第五讲:东方数论的智慧——中国与印度”

大家好。在过去的几讲中,我们领略了古希腊数学在几何、数论以及无穷概念处理上的辉煌成就与深刻思辨。然而,数学的星空并非只有地中海这一片璀璨。在地球的另一端,古老的东方文明也在独立地发展着独具特色且同样深刻的数学思想。

今天,我们将把目光投向亚洲,特别是古代中国和印度。我们将看到,一些我们认为是”希腊的”思想,如欧几里得算法,也在这里独立生根发芽。更重要的是,东方的数学家们在解决一些希腊人未曾深入或未能完全解决的问题上,取得了惊人的突破,尤其是在求解方程的整数解方面。这一讲,我们将重点探索中国古代数学的智慧结晶——中国剩余定理,以及印度数学家在求解佩尔方程上的高超技巧。

同余问题的实用背景:古代历法计算

Section titled “同余问题的实用背景:古代历法计算”

在我们深入探讨”中国剩余定理”的精妙算法之前,首先需要理解一个重要问题:为什么求解同余方程组在中国古代如此重要?答案主要在于一个极其重要的领域——历法(Calendrical Science)

与纯粹基于太阳的阳历(如古罗马的儒略历)不同,中国古代的历法是一种阴阳合历。它既要反映太阳的回归年周期(决定四季和节气),又要反映月亮的朔望月周期(决定月份的划分)。这两个周期并非简单的整数倍关系:

  • 一个回归年约 365.2422 天。
  • 一个朔望月约 29.5306 天。

协调这两个不同的周期,并将其与日常记录时间的干支纪日法(一个 60 天的周期)相结合,是古代天文学家和数学家面临的核心挑战。这自然而然地引出了同余问题。

一个简化的例子: 想象一位古代历法家需要预测一个重要的日子。他知道这个宇宙遵循几个独立的”时钟”:

  1. 太阳钟: 每 365 天循环一次(简化年份)。
  2. 月亮钟: 每 30 天循环一次(简化月份)。
  3. 干支钟: 每 60 天循环一次。

假设宇宙的起点”上元”是所有钟都指向 0 的时刻。现在,历法家观测到,今天是”太阳钟”的第 4 天,“月亮钟”的第 10 天,“干支钟”的第 25 天。那么,从”上元”开始,一共过去了多少天(xx)呢?这个问题就转化为了一个同余方程组:

x4(mod365)x10(mod30)x25(mod60)\begin{aligned} x &\equiv 4 \pmod{365} \\ x &\equiv 10 \pmod{30} \\ x &\equiv 25 \pmod{60} \end{aligned}

古代数学家需要一个通用的方法来解决这类问题,以制定精确的历法,预测日月食,并指导农业生产。我们即将学习的”中国剩余定理”及其系统化算法”大衍求一术”,正是为了解决这类实际且复杂的挑战而发展出来的强大数学工具。

中国剩余定理:求解同余问题的绝妙算法

Section titled “中国剩余定理:求解同余问题的绝妙算法”

这是中国古代数学对世界数学最重要的贡献之一,其思想深邃,应用广泛。

问题的起源:《孙子算经》中的”物不知数”问题

Section titled “问题的起源:《孙子算经》中的”物不知数”问题”

大约在公元 3 世纪,中国古代数学典籍《孙子算经》中记载了这样一个著名的问题:

“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?”

用现代数学语言来说,就是求解一个同余方程组:

x2(mod3)x3(mod5)x2(mod7)\begin{aligned} x &\equiv 2 \pmod{3} \\ x &\equiv 3 \pmod{5} \\ x &\equiv 2 \pmod{7} \end{aligned}

孙子的解法:一个构造性的天才思路

Section titled “孙子的解法:一个构造性的天才思路”

孙子给出的解法步骤清晰,暗含了深刻的模块化思想:

  1. 寻找一个数,它被 5 和 7 整除(即是 35 的倍数),且被 3 除余 1。这个数是 70。因为我们需要的余数是 2,所以取 2×70=1402 \times 70 = 140
  2. 寻找一个数,它被 3 和 7 整除(即是 21 的倍数),且被 5 除余 1。这个数是 21。因为我们需要的余数是 3,所以取 3×21=633 \times 21 = 63
  3. 寻找一个数,它被 3 和 5 整除(即是 15 的倍数),且被 7 除余 1。这个数是 15。因为我们需要的余数是 2,所以取 2×15=302 \times 15 = 30
  4. 将这三个数相加:140+63+30=233140 + 63 + 30 = 233。这个数满足所有条件。
  5. 最后,减去 3、5、7 的公倍数(3×5×7=1053 \times 5 \times 7 = 105)的整数倍,得到最小的正整数解:2332×105=23233 - 2 \times 105 = 23

从特解到通法:秦九韶的”大衍求一术”

Section titled “从特解到通法:秦九韶的”大衍求一术””

孙子的方法非常巧妙,但其中如何系统地找到”被某数除余 1”的关键数字(即模逆元)并未详细说明。直到公元 1247 年,南宋数学家秦九韶在其著作《数书九章》中,提出了一个完全系统化的算法——“大衍总数术”,其核心就是”大衍求一术”。

“更相减损术”作为基础: 在讲解”大衍求一术”前,我们先要了解其基础——求最大公约数的”更相减损术”。这个方法记载于更早的《九章算术》中,其思想与欧几里得算法的辗转相减法完全一致。其步骤是:对于两个正整数,用较大的数减去较小的数,将得到的差与较小的数组成新的一对。重复此过程,直到两个数相等,这个相等的数就是它们的最大公约数。

大衍求一术:系统化的模逆元求解: “大衍求一术”的本质,就是我们今天所说的扩展欧几里得算法。它是一个巧妙的回溯过程,建立在”更相减损术”之上。其目标是系统化地求解一次同余方程 ax1(modm)ax \equiv 1 \pmod{m}

  1. 前提条件: 首先,aamm 必须互质,即 gcd(a,m)=1\text{gcd}(a, m) = 1。如果它们不互质,那么逆元不存在。
  2. “求一”过程: 算法首先用”更相减损术”的过程求 gcd(a,m)\text{gcd}(a, m),并记录下每一步的商。
  3. 回溯构造: 然后,算法从最后一步 gcd=1\text{gcd}=1 开始,反向利用之前记录的商,一步步将 11 表示为 aamm 的线性组合,即找到整数 xxyy 使得 ax+my=1ax + my = 1
  4. 得到模逆元:ax+my=1ax + my = 1 这个等式在模 mm 的意义下看待时,mymy 这一项就变成了 0,于是等式变为 ax1(modm)ax \equiv 1 \pmod{m}。此时求得的 xx 就是 aa 关于模 mm 的一个逆元。

历史意义: 秦九韶将这个算法流程化、系统化,使得求解任何一次同余方程组都有了通用的方法。这一成就标志着中国古代数学在算法设计上的高超水平和世界领先地位,比欧洲高斯等数学家建立完整理论早了近 600 年。

佩尔方程:印度数学的另一座高峰

Section titled “佩尔方程:印度数学的另一座高峰”

当我们转向印度,会发现他们在另一个著名的丢番图方程——佩尔方程 x2Ny2=1x^2 - Ny^2 = 1 的求解上取得了惊人的成就。

婆罗摩笈多(Brahmagupta,约 628 年)的”构造法”

Section titled “婆罗摩笈多(Brahmagupta,约 628 年)的”构造法””

婆罗摩笈多是第一位系统研究佩尔方程并取得突破的印度数学家。他的核心贡献是一个绝妙的恒等式(现在称为”婆罗摩笈多恒等式”):

(x12Ny12)(x22Ny22)=(x1x2+Ny1y2)2N(x1y2+x2y1)2(x_1^2 - Ny_1^2)(x_2^2 - Ny_2^2) = (x_1x_2 + Ny_1y_2)^2 - N(x_1y_2 + x_2y_1)^2

“解的复合”: 这个恒等式意味着,如果你有两个方程 x12Ny12=k1x_1^2 - Ny_1^2 = k_1x22Ny22=k2x_2^2 - Ny_2^2 = k_2 的解,你可以把它们”复合”起来,得到方程 x2Ny2=k1k2x^2 - Ny^2 = k_1k_2 的一个新解。

意义: 这提供了一种从已知解(哪怕是 k1k \neq 1 的方程的解)生成新解的强大工具。例如,从一个解可以生成无穷多个解。

婆什迦罗二世(Bhaskara II,约 1150 年)的”循环法”(Chakravala)

Section titled “婆什迦罗二世(Bhaskara II,约 1150 年)的”循环法”(Chakravala)”

婆罗摩笈多的方法虽然强大,但并非对所有 NN 都普遍适用。五百年后,婆什迦罗二世完善了这一理论,提出了一个被称为”循环法”的通用算法。

算法精髓:迭代与逼近: “循环法”(Chakravala,意为”轮子”)是一个精妙的迭代算法,其目标是从一个辅助方程 ax2Ny2=kax^2 - Ny^2 = k 的解 (x,y)(x, y) 出发,通过与另一个平凡解 (m,1)(m, 1)(满足 m2N(1)2=m2Nm^2 - N(1)^2 = m^2 - N)进行”复合”,来构造一个新方程 ax2Ny2=ka'x'^2 - Ny'^2 = k' 的解 (x,y)(x', y'),并巧妙地选择 mm 使得新常数 k|k'|k|k| 更小。

具体步骤概述:

  1. 初始解: 从一个简单的整数三元组 (a,b,k)(a, b, k) 开始,它满足 a2Nb2=ka^2 - Nb^2 = k。例如,可以选一个 aa,使得 a2N|a^2 - N| 尽可能小,此时 b=1b = 1
  2. 寻找下一个乘数 mm 寻找一个正整数 mm,它需要满足两个条件:(i) a+bma + bm 必须能被 kk 整除;(ii) m2N|m^2 - N| 的值要尽可能小。
  3. 构造新解: 利用婆罗摩笈多恒等式,将解 (a,b)(a, b) 与”平凡解” (m,1)(m, 1) 进行复合,并利用 mm 的特殊选择来”约简”,从而得到一个新方程 a2Nb2=ka'^2 - Nb'^2 = k' 的整数解 (a,b)(a', b')。这里的 k=(m2N)/kk' = (m^2 - N) / k。由于 mm 的选择,k|k'| 会比 k|k| 小。
  4. 循环迭代: 以新的三元组 (a,b,k)(a', b', k') 为基础,重复第 2 步和第 3 步。这个过程像轮子一样”循环”下去。

算法的终点与威力: 婆什迦罗二世证明了这个循环过程最终必然会达到一个 kk 值为 1,1,2,2,4,41, -1, 2, -2, 4, -4 的方程。对于这些情况,都存在简单的方法可以最终推导出 x2Ny2=1x^2 - Ny^2 = 1 的解。为了展示其方法的威力,婆什迦罗二世求解了 x261y2=1x^2 - 61y^2 = 1。这个问题相当困难,其最小正整数解是一个巨大的数字(x=1766319049,y=226153980x = 1766319049, y = 226153980)。这显示了印度数学家在发展通用迭代算法上的高超能力与惊人成就。

有理三角形:婆罗摩笈多的又一杰作

Section titled “有理三角形:婆罗摩笈多的又一杰作”

在古希腊人完美解决了有理直角三角形的描述后,一个自然的问题是:一般的有理三角形该如何描述?一个合理的定义是:有理三角形指边长和面积都是有理数的三角形。

这个问题在希腊数学中鲜有提及,但我们发现,又是印度数学家婆罗摩笈多(约公元 628 年)在他的著作中给出了详尽的研究。

核心思想: 婆罗摩笈多发现,任何一个有理三角形,都可以被它的一条高分解为两个有理直角三角形

证明思路: 对于边长为 a,b,ca, b, c 的三角形,假设高 hh 落在边 cc 上,将 cc 分为 c1c_1c2c_2 两段。根据勾股定理:

a2=h2+c12b2=h2+c22\begin{aligned} a^2 &= h^2 + c_1^2 \\ b^2 &= h^2 + c_2^2 \end{aligned}

两式相减得到 a2b2=c12c22=(c1c2)(c1+c2)a^2 - b^2 = c_1^2 - c_2^2 = (c_1 - c_2)(c_1 + c_2)。由于 a,b,ca, b, c 是有理数,而 c1+c2=cc_1 + c_2 = c,所以 c1c2c_1 - c_2 也是有理数。联立 c1+c2c_1 + c_2c1c2c_1 - c_2 可解出 c1c_1c2c_2 都是有理数。如果此时面积也是有理数,那么高 hh 必然也是有理数。这样,原三角形就被成功分解成了两个边长(c1,h,ac_1, h, ac2,h,bc_2, h, b)都是有理数的直角三角形。

  1. 中国的智慧: 请尝试用孙子的思路,解决一个新的同余问题:一个数被 3 除余 1,被 4 除余 2,被 5 除余 3。写出你的步骤。

  2. 印度的技巧: 婆什迦罗二世求解 x261y2=1x^2 - 61y^2 = 1 得到了一个巨大的解。这告诉我们关于丢番图方程的哪些特性?一个”简单”形式的方程,其解是否一定”简单”?

  3. 东西方对比: 古希腊人研究 x2Ny2=1x^2 - Ny^2 = 1 主要是为了寻找 N\sqrt{N} 的有理近似值。而印度数学家则专注于寻找这个方程的整数解。这两种不同的研究动机,如何体现了他们数学风格的差异?

  4. 数学与文明: 政治需求(如颁布历法)、经济活动和文化传统是如何深刻影响古代数学的发展方向和研究重点的?