发展历史
播报编辑
勾股定理在西方被称为Pythagoras定理,它以公元前6世纪希腊哲学家和数学家的名字命名。可以有理由认为他是数学中最重要的基本定理之一,因为他的推论和推广有着广泛的引用。虽然这样称呼,他也是古代文明中最古老的定理之一,实际上比Pythagoras早一千多年的古巴比伦人就已经发现了这一定理,在Plimpton 322泥板上的数表提供了这方面的证据,这块泥板的年代大约是在公元前1700年。对勾股定理的证明方法,从古至今已有400余种 [2]付杠跨催榆主喇。
据《周髀算经》记载,“昔者周公问与商高曰:请问古者包牺立周天历度。夫天不可阶而升.地不可得尺寸而度. 请问数安从出. 商高曰.数之法.出于圆方. 圆出于方.方出于矩. 矩出于九九八十一. 故折矩, 以为句,广三, 股修四. 径隅五. 既方其外.半之一矩. 环而共盘.得成三四五. 两矩共长二十有五.是谓积矩. 故禹之所以治天下者.此数之所生也. 周公曰.大哉言数. 请问用矩之道. 商高曰.平矩以正绳. 偃矩以望高。覆矩以测深.卧矩以知远. 环矩以为圆.合矩以为方. 方属地.圆属天.天圆地方. 方数为典.以方出圆。笠以写天. 天青黑.地黄赤.天数之为笠也.青黑为表.丹黄为里.以象天地之位. 是故.知地者智.知天者圣. 智出于句. 句出于矩. 夫矩之于数.其裁制万物.惟所为耳. 周公曰.善哉。” [3]
(3n、4n、5n)(n是正整数)(这是最著名的一组!俗称“勾三,股四,弦五”。古人把较短的直角边称为勾,较长直角边称为股,而斜边则为弦。) (5n、12n、13n)(n是正整数)
(6、8、10)
(7、24、25)
(8、15、17)
(9、姜慨漏40、41)
(1犁删乎0、24、26)
(11、60、61)
(12、16、20)
(乃罪雄12、35、37)
(13、84、85)
(15、20堡讲、25)
(15、112、113)
(17、144、145)
(18、仔旬匪24、30)
(19、180、181)
(20、21、29)
(20、99、1乌屑01)
(48、55、73)
(60、91、109)
常用套路
播报编辑
简介
即a²+b²=c²,a,b,c∈N
关于这样的数组,比较常用也比较实用的套路有以下两种 [4]:
第一类型
n=1时(a,b,c)=(3,4,5)
n=2时(a,b,c)=(5,12,13)
n=3时(a,b,c)=(7,24,25)
……
第二类型
2、当a为大于4的偶数2n时,b=n²-1, c=n²+1
也就是把a的一半的平方分别减1和加1,例如:
n=3时(a,b,c)=(6,8,10)
n=4时(a,b,c)=(8,15,17)
n=5时(a,b,c)=(10,24,26)
n=6时(a,b,c)=(12,35,37)
……
所以如果你只想得到互质的数组,这条可以改成,对于a=4n (大于等于2), b=4n²-1, c=4n²+1,例如:
n=2时(a,b,c)=(8,15,17)
n=3时(a,b,c)=(12,35,37)
n=4时(a,b,c)=(16,63,65)
……
公式证明
播报编辑
证明
a=2mn
b=m²-n²
c=m²+n²
证:
假设a²+b²=c²,这里研究(a,b)=1的情况(如果不等于1则(a,b)|c,两边除以(a,b)即可)
等式化为4k² = (c+b)(c-b)
显然b,c同奇偶(否则右边等于奇数矛盾)
作代换:M=(c+b)/2, N=(c-b)/2,显然M,N为正整数
往证:(M,N)=1
如果存在质数p,使得p|M,p|N, 那么p|M+N(=c), p|M-N(=b), 从而p|c, p|b, 从而p|a,这与(a,b)=1矛盾
所以(M,N)=1得证。
如果对于某个pi,M的pi因子个数为奇数个,那N对应的pi因子必为奇数个(否则加起来不为偶数),从而pi|M, pi|N,(M,N)=pi>1与刚才的证明矛盾 所以对于所有质因子,pi²|M, pi²|N,即M,N都是平方数。
设M = m², N = n²
从而有c+b = 2m², c-b = 2n²,解得c=m²+n², b=m²-n², 从而a=2mn
推广形式
关于勾股数的公式还是有局限的。勾股数公式可以得到所有的基本勾股数,但是不可能得到所有的派生勾股数。比如3,4,5;6,8,10;9,12,15...,就不能全部有公式计算出来 [5]。
但可以采用同乘以任意整数的形式来获取所有解!
完全公式
播报编辑
公式
a=m,b=(m^2 / k - k) / 2,c=(m^2 / k + k) / 2 ①
其中m ≥3
⒉ 当m确定为任意一个 ≥4的偶数时,k={m^2 / 2的所有小于m的偶数因子}
基本勾股数与派生勾股数可以由完全一并求出。例如,当m确定为偶数432时,因为k={432^2 / 2的所有小于432的偶数因子}= {2,4,6,8,12,16,18,24,32,36,48,54,64,72,96,108,128,144,162,192,216,288,324,384},将m=432及24组不同k值分别代入b=(m^2 / k - k) / 2,c=(m^2 / k + k) / 2;即得直角边a=432时,具有24组不同的另一直角边b和斜边c,基本勾股数与派生勾股数一并求出。而勾股数的组数也有公式能直接得到。
组数N
⒈ 取奇数a=p1^m1×p2^m2×……×pr^mr,其中k={1,a^2的所有小于a的因子},则k的可取值个数:
N=[(2m1+1)×(2m2+1)×……×(2mr+1)-1]/2
⒉ 取偶数a=2^m0×p1^m1×p2^m2×……×pr^mr,其中k={a^2 / 2的所有小于a的偶数因子},则k的可取值个数:
N=[(2m0-1)×(2m1+1)×(2m2+1)×……×(2mr+1)-1]/2
其中,p1,p2,……,pr为互不相同的奇素数,m0,m1,……,mr为幂指数。
编程
播报编辑
Java
import java.math.*;
public class Test{
public static void main(String[] args){
int number=0;
int a=3,b,c;
double d;
for(;a<100;a++)
for(b=a+1;b<100;b++){
d=Math.sqrt(a*a+b*b);
c=(int)d;
if(c>100)break;
if(d-c<=0){
number++;
System.out.print("("+a+""+b+""+c+")");
if(number%4==0){
System.out.println();
}
}
}
System.out.println("共有"+number+"组");
}
}
C++
#include <iostream>
using namespace std;
int main()
{
int a, b, c;
for (a = 1; a < 100; a++)
for (b = 1; b < 100; b++)
for (c = 1; c < 100; c++)
if (a<b && a*a + b*b == c*c)
cout << a << " " << b << " " << c << endl;
return 0;
}
Python3.x
#通过公式求勾股数
def Ht(k, m):
'''
a = k * (m * m - n * n)
b = k * (2 * m * n)
c = k * (m * m + n * n)
'''
result = []
for k0 in range(1, k + 1):
for m0 in range(2, m + 1):
for n0 in range(1, m0):
a = k0 * (m0 * m0 - n0 * n0)
b = k0 * (2 * m0 * n0)
c = k0 * (m0 * m0 + n0 * n0)
if not {a, b, c} in result:
result.append({a, b, c})
result = [sorted(list(x)) for x in result]
return (sorted(result,key=lambda x:x[0]),
'共有 {length} 组勾股数'.format(length = len(result)))
Ht(10, 10)
整勾股数
播报编辑
常见组合
3,4,5 : 勾三股四弦五
5,12,13 : 5·21(12)记一生(13)
6,8,10: 连续的偶数
8,15,17 : 八月十五在一起(17)
特殊组合
连续的勾股数只有3,4,5
连续的偶数勾股数只有6,8,10
20以内
3 4 5;5 12 13; 6 8 10;8,15,17;9 12 15
20-130
7 24 25;9 40 41;10 24 26;11 60 61;12 16 20;12 35 37;13 84 85;14 48 50;15 20 25;15 36 39;15 112 113;16 30 34;16 63 65;18 24 30;18 80 82;20 21 29;20 48 52;20 99 101;21 28 35;21 72 75;22 120 122;24 32 40;24 45 51;24 70 74;25 60 65;27 36 45;28 45 53;28 96 100;30 40 50;30 72 78;32 60 68;33 44 55;33 56 65;35 84 91;36 48 60;36 77 85;39 52 65;39 80 89;40 42 58;40 75 85 ;40 96 104;42 56 70 ; 45 60 75 ; 48 55 73 ; 48 64 80 ; 48 90 102 ; 51 68 85 ;54 72 90 ; 56 90 106 ; 57 76 95 ; 60 63 87 ; 60 80 100 ;60 91 109 ; 63 84 105 ; 65 72 97 ; 66 88 110 ; 69 92 115 ;72 96 120 ; 75 100 125 ; 80 84 116。
三个数都在100以内共有52组。
其他公式
三个任意半径的圆相互外切,其半径两两相加,分别是以三个圆的圆心为顶点的三角形的三个边长。如《方法图解》所示:设一直角三角形斜边为a+n,另两个直角边分别是a+b和b+n。a、b都是正整数,且a>b [6]。以勾股定理得
,展开并化简得:,即
,按《方法图解》步骤得
,将任意两个不相等的正整数数带入上式,注意a>b,即可得到一组勾股数。不过得到的勾股数可能不互质,要除以三个数的最大公因数,就可得到一组互质的勾股数。