如何快速生成勾股数
最近我忽然想到:如何快速生成勾股数?
显然\((a,b,c)\)是勾股数,\((ka,kb,kc)(k>1)\)也是勾股数,所以我们加一个条件\(\gcd(a,b,c)=1\)
因为\(c^2=a^2+b^2\),所以\(a^2=(c-b)(c+b)\)此时\(\gcd(b,c)=1\),因为假设不等于1,设等于\(k\),\(k|c-b,c+b\),所以\(k^2|a^2,k|a\),\(\gcd(a,b,c)\neq 1\)。
同理我们也可以得到\(\gcd(a,c)=1\),\(\gcd(a,b)=1\)
\(\gcd(c-b,c+b)=\gcd(2b,c+b)\),显然\(\gcd(c+b,b)=\gcd(c,b)=1\),所以\(\gcd(c-b,c+b)=\gcd(2,c+b)=\)\(1\)或者\(2\)
当等于\(1\),则\(c-b,c+b\)都必须为完全平方数,设为\(d=x^2,e=y^2\),那么\(\gcd(d,e)=1\),所以\(\gcd(x,y)=1\)。
当等于\(2\),此时\(2|c-b,c+b\),此时\(4|(c-b)(c+b)=a^2\),所以\(a\)是偶数
\(2|c-b,c+b\),所以\(c,b\)都是奇数或者都是偶数。但是都是偶数时\(\gcd(c,b)>1\),所以都是奇数
但是此时\(\gcd(c-a,c+a)=\gcd(2a,c+a)\),由于\(c\)是奇数 ,\(a\)是偶数,所以\(c+a\)是奇数,\(\gcd(2a,c+a)=\gcd(a,c+a)=\gcd(a,c)=1\),可以转化为前一种情况。
综上所述,生成满足\(\gcd(a,b,c)=1\)的所有勾股数的方法是:枚举\(\gcd(x,y)=1\)的\((x,y)\),令\(c+b=x^2,c-b=y^2\),\(c=\frac{x^2+y^2}{2},b=\frac{x^2-y^2}{2}\),\(a=xy\)即可。