怎么样求勾股数?

JavaScript012

怎么样求勾股数?,第1张

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

即a^2+b^2=c^2,a,b,c∈n

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

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

1、当a为大于1的奇数2n+1时,b=2*n^2+2*n,

c=2*n^2+2*n+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^2-1,

c=n^2+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

(n>=2),

b=4*n^2-1,

c=4*n^2+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)

...

...

如果可以是无理数的话,则随便找几组都是可以的,如

1/3=(1/3)^2+((根号2)/3)^2

如果要是有理分数的话,是不可能找到两个分数平方和为1/3的。

理由如下:

设若1/3=(a/b)^2+(c/d)^2

则1/3=((ad)^2+(bc)^2)/(bd)^2

因此(bd)^2这个平方数中包含3这个因子,从而可以设之为3*3*n*n,n为正整数。

那么也就有(ad)^2+(bc)^2=3n^2

这个式子可以写为3n^2=p^2+q^2,记为(1)式,其中p、q都是正整数,可以说明不可能存在一组正整数n,p,q使得该式子成立。

我们设p除3的余数为k1,q除3的余数是k2,则q^2+p^2除3的余数等于k1^2+k2^2除3的余数。由于(1)式左边是3n^2可以被三整除,所以k1^2+k2^2也应该能被3整除,又因为除3的余数只有0,1,2三种可能,穷举可知只可能k1、k2都等于0。

从而p、q都是3的倍数,可设p=3p',q=3q',其中p'和q'都是正整数。

这样就有3n^2=(3p')^2+(3q')^2,即n^2=3*(p'^2+q'^2)可见n也必须包含3这个因子,从而可设n=3n',n'为正整数。故3n'^2=p'^2+q'^2。

这也就是说,对于任意一组满足(1)式的n,p,q而言,n、p、q都必须为3的倍数,且n/3,p/3,q/3也都是满足(1)式的一组正整数。那我们取满足(1)的n,p,q中最小的一组,则由上面的推证可知n/3,p/3,q/3是满足(1)的更小的一组正整数,这显然是前后矛盾的。

从而说明不存在使得(1)成立的一组正整数n,p,q,那么也就不会存在有理分数a/b和c/d使得1/3=(a/b)^2+(c/d)^2成立。

用公式:

x=a&sup2-b&sup2

y=2ab

z=a&sup2+b&sup2

则x&sup2+y&sup2=z&sup2

a,b满足a>b,互质,一奇一偶,以上公式将给出x奇y偶的两两互质的勾股数组。

因为x,y地位对称,交换二者的值可得x偶y奇的勾股数组。另外如果将x,y,z同扩大整数k倍,仍是勾股数组,只不过不再互质而已.

例如取a=2,b=1,则得到(3,4,5)扩大k倍可得(3k,4k,5k)

a=3,b=2,得到(5,12,13)