-
勾股数 编辑
勾股数,又名毕氏三元数 。勾股数就是可以构成一个直角三角形三边的一组正整数。勾股定理:直角三角形两条直角边a、b的平方和等于斜边c的平方(a²+b²=c²)。
据《周髀算经》记载,“昔者周公问与商高曰:请问古者包牺立周天历度。夫天不可阶而升.地不可得尺寸而度. 请问数安从出. 商高曰.数之法.出于圆方. 圆出于方.方出于矩. 矩出于九九八十一. 故折矩, 以为句,广三, 股修四. 径隅五. 既方其外.半之一矩. 环而共盘.得成三四五. 两矩共长二十有五.是谓积矩. 故禹之所以治天下者.此数之所生也. 周公曰.大哉言数. 请问用矩之道. 商高曰.平矩以正绳. 偃矩以望高。覆矩以测深.卧矩以知远. 环矩以为圆.合矩以为方. 方属地.圆属天.天圆地方. 方数为典.以方出圆。笠以写天. 天青黑.地黄赤.天数之为笠也.青黑为表.丹黄为里.以象天地之位. 是故.知地者智.知天者圣. 智出于句. 句出于矩. 夫矩之于数.其裁制万物.惟所为耳. 周公曰.善哉。”
(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...,就不能全部有公式计算出来 。
但可以采用同乘以任意整数的形式来获取所有解!
公式
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为幂指数。
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组。
其他公式
方法图解
1、本站所有文本、信息、视频文件等,仅代表本站观点或作者本人观点,请网友谨慎参考使用。
2、本站信息均为作者提供和网友推荐收集整理而来,仅供学习和研究使用。
3、对任何由于使用本站内容而引起的诉讼、纠纷,本站不承担任何责任。
4、如有侵犯你版权的,请来信(邮箱:baike52199@gmail.com)指出,核实后,本站将立即删除。