趣味数学及编程拓展
上QQ阅读APP看书,第一时间看更新

1.4 勾股数与长方体数

勾股数是最早引起人们兴趣的数学现象,在很远久的年代世界各地都先后有探讨与研究过勾股数的记载。

长方体数是勾股数的三维推广。本节在探索勾股数设计求解基础上,探讨长方体数及其相关的“六个正整数问题”。

1.4.1 勾股数

【背景】 勾广三,股修四,弦隅五。

图1-1 3,4,5的数形关系

埃及最早发现3,4,5是一组勾股数。公元前的巴比伦人就知道119,120,169是一个直角三角形的三边长。

我国早期的《周髀算经》谈到“勾广三,股修四,弦隅五”,就是指边长为3,4,5的直角三角形,即32+42=52

我国著名数学家华罗庚教授在他生前写的文章中说:“……如果我们宇宙航船到了一个星球上,那儿也有如我们人类一样高级的生物存在。我们用什么东西作为我们之间的媒介?带幅画去吧,那边风景特殊,不了解;带一段录音去吧,也不能沟通。我看最好带两个图形去,一个‘数’,一个‘数形关系’(勾股定理)。”

“数形关系”即勾股定理,勾股数3,4,5的数形关系如图1-1所示。

古代数学家刘徽在《九章算术》中记录了52+122=132,82+152=172,72+242=252,202+212=292等多组勾股数的记载。

古希腊数学家毕达哥拉斯得到一个关于勾股弦数的公式,当n为奇数时,n,构成勾股弦数

通常把满足3元2次方程式

的正整数解x,y,z称为一组勾股数,又称毕达哥拉斯三元数组。该方程式称为“商高方程”或“毕达哥拉斯方程”。

注意到勾股数3,4,5之积为60,考察其他勾股数之积也能被60整除,猜想勾股数之积是否都为60的倍数?

【命题1】 若正整数x,y,z是一组满足式(1)的勾股数,则其积xyz必被60整除。

【证明】 只要证满足式(1)的x,y,z有一个是3的倍数,有一个是4的倍数,有一个是5的倍数,则必有xyz是60的倍数,即xyz=0(mod 60)。

(1)x,y,z中必有一个是3的倍数。

假设x,y,z都不是3的倍数,注意到

(3k±1)2=3(3k2±2k)+1=1(mod 3)

因而式(1)左边为2(mod 3),而(1)右边为1(mod 3),矛盾。

(2)x,y,z中必有一个是4的倍数。

假设x,y,z都不是4的倍数,注意到

(4k±1)2=8(2k2±k)+1=1(mod 8)

(4k+2)2=8(2k2+2k)+4=4(mod 8)

因而式(1)左边为0,2,5(mod 8),而式(1)右边为1,4(mod 8),矛盾。

(3)x,y,z中必有一个是5的倍数。

假设x,y,z都不是5的倍数,注意到

(5k±1)2=5(5k2±2k)+1=1(mod 5)

(5k±2)2=5(5k2±4k)+4=4(mod 5)

因而式(1)左边为0,2,3(mod 5),而式(1)右边为1,4(mod 5),矛盾。

综上即得满足式(1)的勾股数x,y,z之积xyz必是60的倍数,证毕。

【拓展】 试探求并输出指定区间[a,b]内的所有勾股数组。

从键盘输入整数a,b(a<b),寻求满足式(1)的整数x,y,z(a≤x<y<z≤b)。

(1)设计要点。

设指定区间为[a,b],设置二重循环在指定区间内枚举x,y(x<y),应用勾股数的定义式计算d=x∗x+y∗y;z=sqrt(d)。

若z≤b且z∗z=d,则输出x,y,z这一组满足式(1)的勾股数解。

(2)程序设计。

(3)程序运行示例与变通。

由勾股数(3,4,5),(20,21,29)构成的直角三角形的两直角边为连续整数。是否可变通以上程序,求取指定区间内两直角边为连续整数的勾股三角形?

变通:求勾股数中y=x+1的子集。

删除y循环,同时在循环体中添加y=x+1;给变量y赋值。

运行变通程序,结果如下所示。

以上所得4组勾股数中,前两个数为连续整数。

【费马大定理】 在3元2次方程式(1)的基础上把指数拓展至n≥3,即得

以上3元n次方程在n≥3时不存在正整数解。

大约1637年左右,法国业余数学家费马(Fermat)在阅读丢番图(Diophantus)《算术》拉丁文译本时,在讨论不定方程(2)的那页书空白处写道:“将一个立方数分成两个立方数之和,或一个4次幂分成两个4次幂之和,或者一般地将一个高于二次的幂分成两个同次幂之和,这是不可能的。关于此,我确信已发现了一种美妙的证法,可惜这里空白的地方太小,写不下。”

费马当时是否真的想出了这一命题的证明,这是一个无法判定的千古之谜,也给后世数学家们留下了一道令人难堪的“作业”。

费马大定理是史上最精彩的一个数学谜题。证明费马大定理的过程是一部数学史诗。

费马大定理起源于300多年前,挑战人类3个世纪,多次震惊全世界,耗尽人类众多最杰出大脑的精力,也让千千万万业余者痴迷。

费马大定理被提出后,经历多人猜想辩证,最终在1995年被英国数学家怀尔斯(Andrew Wiles)彻底证明。2016年3月15日,挪威自然科学与文学院宣布将2016年阿贝尔奖(Abel Prize)授予怀尔斯,表彰他令人震惊的费马大定理证明。

【欧拉猜想】 把3元2次方程式(1)拓展到多元,数学大师欧拉曾有过一个猜想:对于n>2,一个n次幂要表示成n次幂之和,至少需要n个加数。

对于欧拉的这一猜想,有人用计算机举出以下反例:

智者千虑必有一失,看来数学天才也有出错的时候。

【问题】 在5个连续整数中两个较大数的平方和等于其余3个数的平方和,试求这5个连续整数。

【思考】 设5个连续整数正中的整数为m,两个较大数即为m+1,m+2,比m小的两个整数则为m-1,m-2,于是有方程式

(m-2)2+(m-1)2+m2=(m+1)2+(m+2)2

化简得

m2-12m=m(m-12)=0

因而得m=12,即有连续5个整数的平方和公式

沿着连续整数推广到任意2n+1个连续整数,有以下命题。

【命题2】 设n为正整数,若m=2n(n+1),则有

式(5)的文字表述为:对于任意正整数n,若2n+1个连续整数的正中整数为m=2n(n+1),则较大的n个整数的平方和与较小的n+1个整数的平方和相等。

【证明】 式(5)两边展开,整理得

式(6)化简得

m2-2n(n+1)m=m[m-2n(n+1)]=0

立得

因而命题2成立。

显然,式(4)是式(5)取n=2的特例。

据式(5),取n为正整数,可得相应的连续2n+1项的等式。

例如,取n=3,得m=24,于是对于7个连续整数[21,27],有

再如,取n=31,得m=1984,于是对于63个连续整数[1953,2015],有

特别指出,据式(5),取n=1,由式(7)可得m=4,于是对于3个连续整数3,4,5,有式32+42=52,这就是前面论及的最早勾股数组。因而可以说式(5)从连续项方面把这一勾股数组从3项扩展到了2n+1项。

1.4.2 长方体数

从式(1)的3元勾股数拓展到4元的长方体数,从二维的勾股三角形拓展到三维的长方体,是自然的引申与拓展。

如果长方体的棱长x,y,z和长方体对角线长w都是正整数,那么把它们叫作一组长方体数。显然,长方体数是勾股数的推广。

探求指定区间[a,b]内的长方体数组,即正整数x,y,z,w满足

其中,a≤x≤y≤z<w≤b。

输入区间[a,b](1≤a<b<10 000),输出区间内的长方体数组(x,y,z,w)。

1. 设计要点

如何求解式(10)这一涉及4变量x,y,z,w的2次不定方程?

为尽可能减少无效循环,根据a≤x≤y≤z<w≤b的约定,设置合适的循环参量。

注意到x2≤b2/3,据x≤y≤z,设置

x:a~sqrt(b∗b/3)

y:x~sqrt((b∗b-x∗x)/2)

z:y~sqrt(b∗b-x∗x-y∗y)

据以上x,y,z的取值直接计算w,若区间内存在整数w满足x∗x+y∗y+z∗z=w∗w,则找出一组满足条件式的整数x,y,z,w。

若输入的区间[a,b]范围比较小,可能不存在长方体数,为避免此时输出出错,设置统计解的变量k。若k=0,此时无解,则作必要的无解说明。

2. 程序设计
3. 程序运行示例与说明

由长方体数的定义,可知长方体数中x,y可能相等(如第二组解),同样y,z也可能相等。

如果要求长方体数中的3边互不相等,即x<y<z,只需在设置枚举循环时,设置y循环从初值y=x+1开始,设置z循环从初值z=y+1开始即可。

1.4.3 6个正整数问题

加德纳(Gardner)是美国著名的科普专栏作家,他在1970年的《科学美国人》杂志上提出一个一般问题:在一个长方体中,从一顶点出发的3条棱长、3个面的对角线长以及体对角线长这7条线段中,能否同时出现6个正整数?

加德纳提出的6个正整数是以下3个不同问题的综合形式。

①体对角线长是无理数,其余6条线段长是正整数。

②一条棱长是无理数,其余是正整数。

③一个面的对角线长是无理数,其余是正整数。

关于问题①,早在1719年,哈尔克(P.Halcke)已经发现,若长方体的棱长为117,44,240,则其面对角线的长度分别为267,244,125。

问题②也是有解的。例如,取长方体的棱长为a=124,b=957,c2=13 852 800,那么各个面对角线的长度是965,3724,3843;体对角线的长度是3845。除去c是无理数外,其余6个数都是正整数。

数学家欧拉已经得到过问题③的一些解。

棱长是(104,153,672),体对角线长是697,2个面对角线长是185,680;

棱长是(117,520,756),体对角线长是925,2个面对角线长是533,765。

下面编程探讨在指定区间[a,b]内搜寻6个整数,其中3个整数是长方体的长、宽、高,另3个整数是该长方体的6个面的对角线长。

1. 设计要点

注意到矩形两边相等时其对角线长非整数,即得6个数中不可能有相等的整数。

设长方体的长、宽、高分别为整数x,y,z(x<y<z),相对应面的对角线长分别为e1,e2,e3。

要使其各面对角线长e1,e2,e3都是整数,则x,y,z这3个数中每两个的平方和都应是平方数d1,d2,d3。也就是说,x,y,z中每两个都应是一组勾股数组的勾股数。

设置x,y,z(a≤x<y<z≤b)三重循环。

注意到x2<b2/2,设置

x:a~sqrt(b∗b/2)

据x<y<z,设置

y:x+1~sqrt(b∗b-x∗x)

z:y+1~sqrt(b∗b-x∗x)

计算x,y的平方和赋给d1,d1再开方取整赋给e1,即d1=x∗x+y∗y,e1=(long)(sqrt(d1)),若d1=e1∗e1,说明以x,y为边长的面的对角线长e1为整数。

同样,判别以x,z为边长与以y,z为边长的面的对角线长是否为整数。

当这3个判别同时满足时,输出一组“6个整数”的解。

2. 求长方体数6个整数程序设计
3. 程序运行示例与说明
     请输入区间[a,b]的上下限a,b:1000,2019
     NO1:1008,1100,1155
     各面对角线长:L(1008,1100)=1492,L(1008,1155)=1533,L(1100,1155)=1595
     NO2:1200,1260,1375
     各面对角线长:L(1200,1260)=1740,L(1200,1375)=1825,L(1260,1375)=1865

以上输出了指定区间内两组长方体数的6个整数,即不同3边长与不同3面的对角线长的整数。

4. 优美长方体

如果有一个长方体,它的所有棱长、所有面对角线长和体对角线长都是正整数,就称它为优美长方体(perfect cuboid)。

是否存在优美长方体?这是一个著名的难题,至今还没有结论。

一个非常自然的想法,是在以上“6个正整数”设计解答的基础上继续探索“7个正整数”。现有的探索还没有确切的结果,无法断言是否存在优美长方体。