勾股数的一些性质

称一个正整数三元组 (a,b,c) 为一组本原勾股数,当且仅当其满足 a2+b2=c2gcd(a,b,c)=1

不是本原勾股数的勾股数被称作派生勾股数

任意本原勾股数 (a,b,c) 的任意 k 倍对应着一组勾股数 (ka,kb,kc)。同时一组勾股数 (a,b,c) 唯一对应着一组本原勾股数,即 (agcd(a,b,c),bgcd(a,b,c),cgcd(a,b,c))

  • 引理 1:若 (a,b,c) 为本原勾股数,则 a,b 奇偶性不同且 c 为奇数。

    证明:若 a,b 奇偶性相同,则必有 a2+b2=c2 为偶数,则 c 为偶数,c24 的倍数。

    a,b 均为偶数,则 2|gcd(a,b,c),矛盾。

    a,b 均为奇数,注意到奇数的平方模 41,故 a2+b22c2(mod4),矛盾。

  • 引理 2:若 (a,b,c) 为本原勾股数,则 gcd(a,b)=gcd(a,c)=gcd(b,c)=1

    证明:根据 a2+b2=c2,若 a,b,c 中有二者是 kk>1)的倍数,则剩下一者也会是 k 的倍数。

  • 定理 1(欧几里得公式):使用如下方法可以找出所有本原勾股数:

    a=m2n2b=2mnc=m2+n2

    其中 m>n1m,n 互质且 m,n 奇偶性不同。

    证明

    首先证明任意本原勾股数都能被表示成定理形式:

    (a,b,c) 为本原勾股数,由引理1,不妨设 a 为奇数,b 为偶数,c 为奇数。

    b=2k,则:

    a2+(2k)2=c24k2=(c+a)(ca)

    注意到 c+a,ca 均为偶数,于是得到:

    k2=c+a2ca2

    考虑 gcd(c+a2,ca2)

    gcd(c+a2,ca2)=gcd(c+a2,a)gcd(c+a,a)=gcd(c,a)=1

    于是 gcd(c+a2,ca2)=1,那么 c+a2,ca2 应该各自都是平方数。

    接下来令 m=c+a2,n=ca2 即可。

    再证明任意满足定理形式的 (a,b,c) 都是本原勾股数:

    只需证明 gcd(a,b,c)=1 即可。分别考虑 gcd(a,b),gcd(b,c),gcd(a,c)

    gcd(a,b)=gcd(m2n2,2mn)=gcd(m2n2,mn)gcd(m2n2,m)gcd(m2n2,n)=1gcd(b,c)=gcd(m2+n2,2mn)=gcd(m2+n2,mn)gcd(m2+n2,m)gcd(m2+n2,n)=1gcd(a,c)=gcd(m2n2,m2+n2)=gcd(2m2,m2+n2)=gcd(m2,m2+n2)=gcd(m2,n2)=1

    其中一些步骤中能把 gcd(x,2y) 直接变成 gcd(x,y) 的原因是 x,2y 奇偶性不同。

  • 定理 2a,b,c 均不超过 N 的本原勾股数的数量不超过 N

    证明: 考虑 c=m2+n2N 的限制,那么本原勾股数数量的一个上界是:

    m=1NNm2<N

接下来不加证明的给出两个类似的定理,因为我也不会证。

  • 定理 3a,b,c 均不超过 N 的勾股数的数量为 O(NlogN)

    但实际上,通过程序暴力计算,发现当 N=109 时,勾股数的数量也只是 6N 左右,因为这玩意常数实在是太小了。

  • 定理 4a,b 均不超过 N 的勾股数的数量为 O(NlogN)

这些结论可以应用于计算方程的解数。比如对于一个三元方程,若能通过换元把它化为 A2+B2=C2 的形式,我们就能在较低的复杂度内找到方程的所有范围内的解。

posted @   ez_lcw  阅读(404)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示