根据勾股定理,任意直角三角形的两条直角边长a,b和斜边长c,则
a²+b²=c²。
十七世纪法国数学家费马(P. de Fermat,1601-1665)
却从另外一个角度看这个问题。他把每一组勾股数(例如,3,4,5;5,12,13;等)都看做含三个未知数的方程x²+y²=z²的一组正整数解。然而,他没有止步于此,他思考高于二次的方程
x³+y³=z³,
x^4+y^4=z^4,
x^5+y^5=z^5,
…
是否也有正整数解呢?
费马在读古希腊数学家丢番图的《算术》一书时,在有方程x²+y²=z²的那页页边上,写下了具有历史意义的一段文字:“……将一个高于二次的幂分为两个同次的幂,这是不可能的,关于此,我确信已发现了一种美妙的证法,可惜这里空白的地方太小,写不下。”可惜的是,费马的证明(要是他真正有的话)从未被人找到过,而后代上百名最优秀的数学家都未能给予证明。费马在致卡卡维的一封信中说他已用无穷下推法证明了n=4的情形,但并未给出全部证明细节。费马的朋友弗雷尼克·德·贝西(Bernard Frenicle de Bessy,1605-1675)利用费马的少量提示,确实给出了对这一情形的证明,发表在他死后(1676年)出版的《论直角三角形的数字性质》(Traite des triangles rectangles en nombres)一书中。后来,欧拉证明了n=3的情形。由指数的性质可以证明3和4的倍数的情形。
用数学语言来表述,费马的结论就是:当自然数n≥3时,方程x^n+y^n=z^n没有正整数解。
上述命题被称为“费马大定理”。它的证明引起了世界各国数学家的关注,包括欧拉、高斯、勒贝格在内的许多著名数学家都对这个命题作了深入的研究,但一直没能证明它。对费马大定理的研究给数学界带来了很大的影响,很多数学成果、甚至数学分支在这个过程中诞生,费马大定理也因此被数学界称为是一只“会下金蛋的鹅”。
费马大定理的证明最终由英国数学家怀尔斯(A. Wiles,1953-)
完成。怀尔斯在童年时代就梦想能证明费马大定理,后来为此作了长期的努力和准备。1986年,他发现了定理证明的一种可能的途径,就开始全力以赴地投入到定理的证明中。1993年6月,怀尔斯在英国剑桥大学的学术讨论会上报告了他的研究成果,立即引起了全世界数学家和数学爱好者的关注。在这以后,他又用了一年多的时间补证了专家小组发现的证明中的疏漏,并最终于1995年彻底完成了证明。
这个有300多年历史的数学难题终于得到解决。1996年3月,怀尔斯因为他的这一杰出数学成就荣获沃尔夫奖,并于1998年8月荣获菲尔兹特别奖,费马大定理的证明则被称为“世纪性的成就”,并被列入1993年的世界科技十大成就之一。
本文利用电脑计算,对费马大定理也做一些探讨:在3≤n≤10,2≤z≤10,x≤y(x≠1)和x<y(x=1)时|x^n+y^n-z^n|的最小值。代码附录1。
结果打印:
图表:(注8, 9 ,10点都在图表之外了)
本文猜想:费马大定理的最小差随着n的增大而单调增大。如果不使用费马大定理能证明这个猜想,那不是就证明了费马大定理。
例题1:n=3是费马大定理成立,证明n=3m(m=2, 3, 4, ...)也成立。
证明:
x^(3m)+y^(3m)=z^(3m)
根据指数的性质,把上式变为
(x^m)^3+(y^m)^3=(z^m)^3
令x^m=a,y^m=b,z^m=c,得
a^3+b^3=b^3
a,b,c无整数解。
一个整数的次方不可能不是整数,因此n=3m(m=2, 3, 4, ...)是费马大定理也是成立的。
练习题1:n=4是费马大定理成立,证明n=4m(m=2, 3, 4, ...)也成立。
附录1:
'''
费马大定理x^n+y^n=z^n 当n>2时无正整数解。
这里研究z≤10的整数,|x^n+y^n-z^n|(z>1,n=3,4,5......, 19)的最小值
'''
import sys
sys.path.append("/5xstar/pyfiles")
from mymath.rcs import *
from fractions import Fraction
from math import *
import turtle as t
t.setup(500,500)
t.screensize(400,400)
t.up()
build(t,xUnt=(1,40),yUnt=(100,10),wc=(-10,-10,390,390))
#z最小最大值
minZ, maxZ = 2, 10
for n in range(3,11):
_mx=pow(maxZ+1, n)
_mn=_mx
_x, _y, _z = 0, 0, 0
for a in range(1,maxZ):
if a==1:
_a=2
else:
_a=a
for b in range(_a,maxZ):
_c=b+1
_mnc=pow(_c,n)
for c in range(b+1, maxZ+1):
_tmnc=abs(pow(a, n)+pow(b, n)-pow(c,n))
if _tmnc<_mnc:
_mnc=_tmnc
_c=c
else:
break
if _mnc<_mn:
_mn, _x, _y, _z=_mnc, a, b, _c
t.setpos(n*40, _mn/10)
t.dot(3, "red")
t.setpos(n*40, _mn/10+5)
t.write("(%d, %d, %d, %d, %d)" % (n, _mn,_x, _y, _z),align="center")
print("当n=%d时,最小差值=%d,这时x,y,z值(%d, %d, %d)" % (n, _mn,_x, _y, _z))