连分数   作者:郭学军   我们在中学就学过了辗转相除法. 已知两个整数, 可以用辗转相除法来得到 它们的最大公因子. 辗转相除法也叫欧几里得除法, 是记载在两千多年前的古希 腊数学家欧几里得的著作《原本》中的.   我们举一个例子来说明辗转相除法. 例如已知两个整数 (67, 12). 我们这 里写成一个数组, 有两个分量, 第一个分量是67, 第二个分量是12. 辗转相除法 总是把其中大的那个数替换成除以小的数之后的余数. 这里的两个分量大的是67, 小的是12, 而67除以12的余数是7. 所以我们可以把(67, 12)换成 (7, 12), 这 个一直做下去, 就可以得到一个序列   (67, 12) -> (7, 12) -> (7, 5) -> (2, 5) -> (2, 1) -> (0, 1)   所以67, 12的最大公因子就是1. 这个过程可以逆回去写. 上面这一行中的 每一步都会有一个新的数字出现. 比如第一个箭头后面新出现了数字 7, 第二个 箭头后面新出现数字5. 记住这些新出现的数字是怎么来的, 倒着从后往前写就 得到了   1=5-2·2=5-2(7-5)=3·5-2·7=3(12-7)-2·7=3·12-5·7=3·12-5(67-5· 12)=28·12-5·67   这样一来, x=-5, y=28, 就是方程 67x+12y=1的解. 而且不难证明, (-5, 28)是方程67x+12y=1的无限多个整数解中离原点 (0,0)最近的一个.   这个结论对一般的情形也是成立的, 假设整数a, b的最大公因子是d, 那么 辗转相除法的逆过程给出来的 ax+by=d的解就是离原点最近的解. 这也就是说辗 转相除法总是给出最优解. 从这里面我们可以体会到辗转相除法的巨大魅力.   有趣的是辗转相除法对两个实数也适用. 例如我们考虑两个实数: 3.1415926和 1. 我们用大数除以小数, 就变成了   3.1415926=3·1+0.1415926, 即 (3.1415926, 1) -> (0.1415926, 1).   我们依次拿大数除以小数, 就变成了   1=7·0.1415926+0.0088518, 即 (0.1415926, 1) -> (0.1415926, 0.0088518).   0.1415926=15·0.0088518+0.0088156, 即 (0.1415926, 0.0088518) -> (0.0088156, 0.0088518).   0.0088518=1·0.0088156+0.0088362, 即(0.0088156, 0.0088518) -> (0.0088156, 0.0088362).   这个过程不会无限制地做下去, 会在若干步之后停下来. 如果把3.1415926 换成圆周率的话, 上面的过程就可以无限地进行下去, 没有停止的时候. 我们看 看上面的这个辗转相除法得到了什么? 我们如果在第一步中就把余数舍掉的话, 就得到了3.1415926的粗略近似3. 如果   我们在第二步中把余数舍掉的话, 就得到了1≈ 7·0.1415926, 或者说是 0.1415926≈ 1/7·   这就给出了3.1415926的好一些的近似22/7. 再往下继续写两步, 我们得到 的是   333/106, 355/113   22/7被称为是疏率, 355/113被称为是密率. 355/113是对圆周率的非常好的 近似, 与圆周率的误差小于一百万分之一. 这说明了辗转相除法可以给出圆周率 的非常好的有理数逼近.   实际上, 这样的方法可以给出任何一个实数的最优的有理数逼近. 假设x是 一个大于0,而小于1的实数, 我们对 (x, 1) 这个有两个分量的数组反复地进行 辗转相除法, 记录下来每一步的商, 依次是a, b, c, d, …, 那么下面的分数   1/(a+1/(b+1/(c+1/(d+…))))   就叫做是 x 的连分数展开式, 连分数展开式在任何一步停下来, 都能给出 当前意义下最佳的有理数逼近.   实数x经过辗转相除法得到的每一步的商 a, b, c, d, …,这个序列是一个 有限序列当且仅当 x是个有理数, 这个序列是一个周期序列当且仅当x 是一个二 次方程的根. 几百年前欧拉观察到e的连分数展开式中的序列是一个无界序列, 由此出发证明e是个无理数.   由于连分数给出来最佳的有理数逼近, 所以它有着非常广泛的应用. 在华罗 庚先生的《高等数学引论》中用连分数解释了闰年法则, 农历的大小月规则, 月 蚀周期等等.   连分数还可以用来辨认一个数是不是有理数. 数学上经常会遇到无穷级数求 和, 或者定积分得到的一些常数. 这些常数如果是有理数, 或者在去掉了一些明 显的π, e之类的因子之后是有理数, 那么通常会对应到一些算术不变量, 比如 某些群的元素个数. 但是这样的常数在研究清楚之前常常只能通过数值计算得到 一个近似值, 那么如何辨认一个精确到小数点之后几十位的小数到底是不是某个 有理数的逼近呢? 这就可以使用连分数了. 如果这个通过   数值计算得到的近似值的连分数展开序列中突然出现某一项特别特别大, 明 显比其他项大出好多个数量级, 那么这个数就很有可能是某个有理数的近似值.   鲜为人知的是伟大的天才数学家, 群论创始人伽罗瓦的第一篇论文就是关于 连分数的, 给出了一个实数的连分数展开是纯周期的充分必要条件. 这篇论文 于1829年他18岁的时候发表.