勾股数 编辑

勾股数勾股数

勾股数,又名毕氏三元数 。勾股数就是可以构成一个直角三角形三边的一组正整数。勾股定理:直角三角形两条直角边a、b的平方和等于斜边c的平方(a²+b²=c²)。

发展历史

编辑
勾股定理在西方被称为Pythagoras定理,它以公元前6世纪希腊哲学家和数学家的名字命名。可以有理由认为他是数学中最重要的基本定理之一,因为他的推论和推广有着广泛的引用。虽然这样称呼,他也是古代文明中最古老的定理之一,实际上比Pythagoras早一千多年的古巴比伦人就已经发现了这一定理,在Plimpton 322泥板上的数表提供了这方面的证据,这块泥板的年代大约是在公元前1700年。对勾股定理的证明方法,从古至今已有400余种 。

据《周髀算经》记载,“昔者周公问与商高曰:请问古者包牺立周天历度。夫天不可阶而升.地不可得尺寸而度. 请问数安从出. 商高曰.数之法.出于圆方. 圆出于方.方出于矩. 矩出于九九八十一. 故折矩, 以为句,广三, 股修四. 径隅五. 既方其外.半之一矩. 环而共盘.得成三四五. 两矩共长二十有五.是谓积矩. 故之所以治天下者.此数之所生也. 周公曰.大哉言数. 请问用矩之道. 商高曰.平矩以正绳. 偃矩以望高。覆矩以测深.卧矩以知远. 环矩以为圆.合矩以为方. 方属地.圆属天.天圆地方. 方数为典.以方出圆。笠以写天. 天青黑.地黄赤.天数之为笠也.青黑为表.丹黄为里.以象天地之位. 是故.知地者智.知天者圣. 智出于句. 句出于矩. 夫矩之于数.其裁制万物.惟所为耳. 周公曰.善哉。”

(3n、4n、5n)(n是正整数)(这是最著名的一组!俗称“勾三,股四,弦五”。古人把较短的直角边称为勾,较长直角边称为股,而斜边则为弦。) (5n、12n、13n)(n是正整数)

(6、8、10)

(7、24、25)

(8、15、17)

(9、40、41)

(10、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、101)

(48、55、73)

(60、91、109)

常用套路

编辑
简介

所谓勾股数,一般是指能够构成直角三角形三条边的三个正整数(例如a,b,c)。

即a²+b²=c²,a,b,c∈N

又由于,任何一个勾股数组(a,b,c)内的三个数同时乘以一个正整数n得到的新数组(na,nb,nc)仍然是勾股数,所以一般我们想找的是a,b,c互质的勾股数组。

关于这样的数组,比较常用也比较实用的套路有以下两种 :

第一类型

当a为大于1的奇数2n+1时,b=2n²+2n, c=2n²+2n+1。

实际上就是把a的平方数拆成两个连续自然数,例如:

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)

……

这是第二经典的套路,当n为奇数时由于(a,b,c)是三个偶数,所以该勾股数组必然不是互质的;而n为偶数时由于b、c是两个连续奇数必然互质,所以该勾股数组互质。

所以如果你只想得到互质的数组,这条可以改成,对于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)即可)

如果a,b均奇数,则a² + b² = 2(mod 4)(奇数mod4余1),而2不是模4的二次剩余,矛盾,所以必定存在一个偶数。不妨设a=2k

等式化为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得证。

依照算术基本定理,k² = p₁a₁×p₂a₂×p₃a₃×…,其中a₁,a₂…均为偶数,p₁,p₂,p₃…均为质数

如果对于某个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...,就不能全部有公式计算出来 。

但可以采用同乘以任意整数的形式来获取所有解!

其中规定m>n>0(两负数相乘可抵消固不考虑),(m,n)=1,m和n必须为一奇一偶,t为正整数

完全公式

编辑

公式

a=m,b=(m^2%20/%20k%20-%20k)%20/%202,c=(m^2%20/%20k%20+%20k)%20/%202%20①

其中m%20≥3

⒈%20当m确定为任意一个%20≥3的奇数时,k={1,m^2的所有小于m的因子}

⒉%20当m确定为任意一个%20≥4的偶数时,k={m^2%20/%202的所有小于m的偶数因子}

基本勾股数与派生勾股数可以由完全一并求出。例如,当m确定为偶数432时,因为k={432^2%20/%202的所有小于432的偶数因子}=%20{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%20/%20k%20-%20k)%20/%202,c=(m^2%20/%20k%20+%20k)%20/%202;即得直角边a=432时,具有24组不同的另一直角边b和斜边c,基本勾股数与派生勾股数一并求出。而勾股数的组数也有公式能直接得到。

组数N

算术基本定理:一个大于1的正整数n,如果它的标准分解式为n=p1^m1×p2^m2×……×pr^mr,那么它的正因数个数为N=(m1+1)×(m2+1)×……×(mr+1);依据定理,易得以下结论

当a给定时,不同勾股数组a,b,c的组数N等于①式中k的可取值个数

⒈%20取奇数a=p1^m1×p2^m2×……×pr^mr,其中k={1,a^2的所有小于a的因子},则k的可取值个数:

N=/2

⒉%20取偶数a=2^m0×p1^m1×p2^m2×……×pr^mr,其中k={a^2%20/%202的所有小于a的偶数因子},则k的可取值个数:

N=/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 =      return (sorted(result,key=lambda x:x),     '共有 {length} 组勾股数'.format(length = len(result))) Ht(10, 10)  

整勾股数

编辑

常见组合

3,4,5%20:%20勾三股四弦五

5,12,13%20:%205·21(12)记一生(13)

6,8,10:%20连续的偶数

8,15,17%20:%20八月十五在一起(17)

特殊组合

连续的勾股数只有3,4,5

连续的偶数勾股数只有6,8,10

20以内

3%204%205;5%2012%2013;%206%208%2010;8,15,17;9%2012%2015

20-130

7%2024%2025;9%2040%2041;10%2024%2026;11%2060%2061;12%2016%2020;12%2035%2037;13%2084%2085;14%2048%2050;15%2020%2025;15%2036%2039;15%20112%20113;16%2030%2034;16%2063%2065;18%2024%2030;18%2080%2082;20%2021%2029;20%2048%2052;20%2099%20101;21%2028%2035;21%2072%2075;22%20120%20122;24%2032%2040;24%2045%2051;24%2070%2074;25%2060%2065;27%2036%2045;28%2045%2053;28%2096%20100;30%2040%2050;30%2072%2078;32%2060%2068;33%2044%2055;33%2056%2065;35%2084%2091;36%2048%2060;36%2077%2085;39%2052%2065;39%2080%2089;40%2042%2058;40%2075%2085%20;40%2096%20104;42%2056%2070%20;%2045%2060%2075%20;%2048%2055%2073%20;%2048%2064%2080%20;%2048%2090%20102%20;%2051%2068%2085%20;54%2072%2090%20;%2056%2090%20106%20;%2057%2076%2095%20;%2060%2063%2087%20;%2060%2080%20100%20;60%2091%20109%20;%2063%2084%20105%20;%2065%2072%2097%20;%2066%2088%20110%20;%2069%2092%20115%20;72%2096%20120%20;%2075%20100%20125%20;%2080%2084%20116。

三个数都在100以内共有52组。

其他公式

方法图解

三个任意半径的圆相互外切,其半径两两相加,分别是以三个圆的圆心为顶点的三角形的三个边长。如《方法图解》所示:设一直角三角形斜边为a+n,另两个直角边分别是a+b和b+n。a、b都是正整数,且a>b 。以勾股定理得

,展开并化简得:,即

,按《方法图解》步骤得

,将任意两个不相等的正整数数带入上式,注意a>b,即可得到一组勾股数。不过得到的勾股数可能不互质,要除以三个数的最大公因数,就可得到一组互质的勾股数。

下一篇 费马大定理

上一篇 皮耶·德·费马