从勾股定理,到费马大定理,再到椭圆曲线,一部辉煌壮丽的数学史诗
费马大定理(Fermat's Last Theorem)不仅是一道困扰数学家300多年的难题,还有人专门写了一本书,书名就是《费马大定理》。这本书在我的Kindle里放了有挺长时间了,最近重新捡了起来,因为我发现比特币加密算法中的椭圆曲线与费马大定理有密切关系,而我又实在看不出费马公式
公式与椭圆曲线
有何联系,所以到书中一寻究竟。
《费马大定理》一书的作者是Simon Singh,他还在1996年导演了同名的纪录片《地平线:费马大定理》(链接:https://v.qq.com/x/page/d0198hri4gz.html)。虽然作者在书和电影中尽量都用朴实的语言,并没有引入几个公式,但如果没有基本的数论知识,理解起来并不轻松,听听多位数学家们的秩事还是挺有意思的。
国内有位张宇老师也专门做了一期视频,把其中的一些故事讲得生动有趣,链接:https://v.qq.com/x/page/e0544ev5yzw.html
勾股定理
费马大定理的描述非常简单,小学生就可以理解,但证明过程奇难无比,这个定理与我们熟知的勾股定理还是近亲。勾股定理的公式
我们在小学时就学过,在国外被称为毕达哥拉斯定理 (Pythagorean theorem)。
满足方程
的正整数解被称为勾股数,在国外称为毕达哥拉斯三元组(Pythagorean triple),最小的一组勾股数是我们熟悉的(3,4,5),西周初年的商高提出了“勾三股四弦五”。
现在有了计算机,找这些勾股数非常轻松,比如一行Python代码就可以搞定,这里去掉了一些重复项,假定a<b<c
print([(a,b,c) for a in range(1,101) for b in range(a,101) for c in range(b,101) if a**2 + b**2 == c**2])
执行结果如下:
[(3, 4, 5), (5, 12, 13), (6, 8, 10), (7, 24, 25), ... , (60, 80, 100), (65, 72, 97)]
Haskell的源代码则更加简洁,代码即公式,公式即代码:
[(x,y,z) | x<-[1..100], y<-[x..100], z<-[y..100], x^2+y^2==z^2 ]
中国人研究数学是实用主义,能把“勾三股四弦五”用于生产实践就行,而国外学派讲究严谨,构建好几条公理,然后通过公理去证明一条一条的定理。勾股定理看似简单,但证明起来也需要一点技巧,我上学时用过的教科书上看到的是经典的欧几里得证明法。说实话,当时看明白了这个复杂的证明思路,但现在无论如何是推不出来了。
有一些爱好者收集了100多种证明方法,可谓是五花八门、千奇百怪,链接:https://www.cut-the-knot.org/pythagoras/index.shtml,我最喜欢下面这种无字的证明。
说到无字证明,再扯远一些,当年看过这个关于排列组合的无字证明,这个图中除了公式之外,绝对是一个字也没有,非常精巧,不过理解起来也并不容易。
费马大定理
勾股公式中存在着无穷的正整数解,但把方程稍微改一下
,就找不出一个正整数解,对于
,
,仍然没有正整数解。因此,费马猜测:
n>2时,没有正整数解。 费马出生贵族,喜欢捉弄其他的数学家,经常呆在家里琢磨出一个定理,对外宣称自己找到了证明方法,让外人苦思冥想而不得解。费马死后,有人在他的手稿里发现了许多定理,其它定理慢慢都被世人解决了,但只有一个没被解决,被称为 最后的定理 (Last theorem),国内翻译为 费马大定理 ,费马折磨人的天性不改,手稿的空白处留着这样一句经典的话:
对这个命题我有一种十分美妙的证明,可惜这里空白太小,写不下。
他留下这一小段话不要紧,这个定理又折磨了后人300多年。
完满数、亲和数、可交往数
完满数 (Perfect Number),又被称为完全数、完美数或完备数,它的所有真因子之和,恰好等于它本身。
从这个思路出发,有人发明了 亲和数 (Amicable Pair),即某个数的所有真因子之和正好等于对方。220和284互为亲和数,因为220的所有因子1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110之和为284,而284的所有因子1, 2, 4, 71, 142之和为220。
再推广之,就有了 可交往数 (Sociable Numbers),例如:数组(1264460, 1547860, 1727636, 1305184)中,第一个数的因数之和等于第二个数,第二个数的因数之和等于第三个数,...,而第四个数的因数之和等于第一个数,就这样,一群数形成了一个社交圈。
欧拉猜想
欧拉从费马大定理出发也提出了一个猜想,他认为下面这样的方程不存在整数解:
不过,这个猜想是不成立的,很快就有人找到了反例。
1966年,L.J.Lander和T.R.Parkin找到一个反例:
1988年,Noam Elkies找出一个反例:
Roger Frye用电脑直接搜索,找出了一组最小的反例:
n<41000000
费马死于1665年,这个定理发表的时候已经是1670年,费马大定理实在是太折磨人了,数学家就从容易的特例开始下手:
1676年、1678年数学家证明了n=4时,费马大定理成立;
1770年,欧拉证明了n=3时成立;
1823年,n=5的情形被证明;
1832年,n=14被攻克;
1839年,n=7被法国数学家拉梅证明;
1844年,德国数学家识库麦尔用了20多年创立了理想数理论,证明了当n<100,并且不是37、59、67三个数时,费马大定理成立;
1955年,n<4002均成立;计算机开始出现,加速了证明的过程。
1976年,n<125000;
1985年,n<41000000;
但这种证明方法永远无法最终证明费马大定理,即使把n推进到10的1亿次方,仍是一个有限数,费马大定理看来是无法证明的。
根据有限的例子来推出一个结论在数学上是不可靠的,比如:31,331,3331,33331,333331,3333331,33333331 这些数都是素数,但很可惜,下一个数333333331却不是素数,它可以分解为17 * 19607843。
10万马克
保罗·沃尔夫斯凯尔(Paul Wolfskehl)是一名医生,同时也是数学爱好者,他迷恋上了一位漂亮的女性,但是惨遭拒绝,这使他倍感沮丧而决定自杀。保罗做什么事情都要按计划行事,他非常谨慎地制定了死亡计划中的每个细节。他定下了自杀的日子,决定在午夜钟声响起时用一颗子弹结束自己的生命。
他做事效率比较高,很快提前把安排好的事情都做完了,这时离午夜还有好几个小时呢。为了消磨这几个小时,他就去了图书馆,随手翻到一本数学期刊,很快他被一篇有关费马大定理证明的论文吸引住了,他发现论文中的一处逻辑有漏洞。于是坐下来开始全神贯注地演算,当然最后他没有证明出费马大定理,但规定的自杀时间在不知不觉中已经过了。
沃尔夫斯凯尔感受到了证明数学题的过程带来的成功喜悦,重新认识到了人生的价值并不只有爱情,数学重新唤起了他生命的欲望。为了感谢这个大定理的救命之恩,他的新遗嘱从他死后财产中拿出10万马克(在1997年时相当与100万英镑)设立了一个大奖,用于奖给任何能证明费马大定理的人。1997年6月27日,该奖最后被安德鲁·怀尔斯获得。
保罗·沃尔夫斯凯尔
椭圆曲线
椭圆曲线的模样并不像椭圆,是因为类似于计算一个椭圆的周长的积分而得名。
椭圆曲线的一般形式是
从下面这个特例中可以看出椭圆曲线长的样子。
据说费马大定理经过一个变换可以变为下面这个椭圆曲线方程:
椭圆曲线都是关于x轴对称的,数学家们再给椭圆曲线定义了一种神奇的加法操作,比如P+Q,表示两点的连线与曲线的交点,再向x轴引垂线,对面的那个点就是相加之后的结果。而对于相同的点的加法R+R,则先做切线,再做垂线。
这种加法操作的几何含义还是挺直观的,可是密码学家们发现把它稍加改造,就可以用于 非对称加密领域 。这种加密理论要求找到一种不可逆的运算,有加法运算,但没有减法;有乘法运算,没有除法运算。本来密码学家们把大素数相乘用于著名的RSA加密算法中,比如:
99996011 * 99999787 = 9999579800849657
两个素数相乘很容易计算,但把右侧的数字分解为2个素数之积难度就不小,当把500位的素数与500位的素数相乘之后,以现在计算机的计算速度几乎无法解决这个大素数的分解难题。