强基初中数学&学Python——第八十八课 函数与方程之三十二:费马大定理

 

  根据勾股定理,任意直角三角形的两条直角边长ab和斜边长c,则

a²+b²=c²

  十七世纪法国数学家费马(P. de Fermat1601-1665

 

却从另外一个角度看这个问题。他把每一组勾股数(例如,34551213;等)都看做含三个未知数的方程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 Bessy1605-1675)利用费马的少量提示,确实给出了对这一情形的证明,发表在他死后(1676年)出版的《论直角三角形的数字性质》(Traite des triangles rectangles en nombres)一书中。后来,欧拉证明了n=3的情形。由指数的性质可以证明34的倍数的情形。

  用数学语言来表述,费马的结论就是:当自然数n≥3时,方程x^n+y^n=z^n没有正整数解。

  上述命题被称为费马大定理。它的证明引起了世界各国数学家的关注,包括欧拉、高斯、勒贝格在内的许多著名数学家都对这个命题作了深入的研究,但一直没能证明它。对费马大定理的研究给数学界带来了很大的影响,很多数学成果、甚至数学分支在这个过程中诞生,费马大定理也因此被数学界称为是一只会下金蛋的鹅

  费马大定理的证明最终由英国数学家怀尔斯(A. Wiles1953-

 

完成。怀尔斯在童年时代就梦想能证明费马大定理,后来为此作了长期的努力和准备。1986年,他发现了定理证明的一种可能的途径,就开始全力以赴地投入到定理的证明中。19936月,怀尔斯在英国剑桥大学的学术讨论会上报告了他的研究成果,立即引起了全世界数学家和数学爱好者的关注。在这以后,他又用了一年多的时间补证了专家小组发现的证明中的疏漏,并最终于1995年彻底完成了证明。

  这个有300多年历史的数学难题终于得到解决。19963月,怀尔斯因为他的这一杰出数学成就荣获沃尔夫奖,并于19988月荣获菲尔兹特别奖,费马大定理的证明则被称为世纪性的成就,并被列入1993年的世界科技十大成就之一。

  本文利用电脑计算,对费马大定理也做一些探讨:在3≤n≤102≤z≤10x≤yx≠1)和x<yx=1)时|x^n+y^n-z^n|的最小值。代码附录1

  结果打印:

 

  图表:(注8, 9 ,10点都在图表之外了)

 

  本文猜想:费马大定理的最小差随着n的增大而单调增大。如果不使用费马大定理能证明这个猜想,那不是就证明了费马大定理。

 

  例题1n=3是费马大定理成立,证明n=3mm=2, 3, 4, ...)也成立。

证明:

x^(3m)+y^(3m)=z^(3m)

根据指数的性质,把上式变为

(x^m)^3+(y^m)^3=(z^m)^3

x^m=ay^m=bz^m=c,得

a^3+b^3=b^3

abc无整数解。

一个整数的次方不可能不是整数,因此n=3mm=2, 3, 4, ...)是费马大定理也是成立的。

  练习题1n=4是费马大定理成立,证明n=4mm=2, 3, 4, ...)也成立。

 

附录1

'''
费马大定理x^n+y^n=z^n n>2时无正整数解。
这里研究z≤10的整数,|x^n+y^n-z^n|z>1n=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))