求解最简勾股数个数

来源:互联网 发布:万方数据库检索页打印 编辑:程序博客网 时间:2024/06/06 09:23

【题目大意】
  求出x,y,z,nx2+y2=z2的所有x,y,z互质正整数解的个数,n1012
【参考解法】
  首先由x2=(z+y)×(zy)x,y,z互质得到(zy)(z+y)可以分别表示为一个完全平方数,若设{z+y=m2zy=n2,则有z=m2+n22y=m2n22,与是所有的解都可以通过z=m2+n22x=mny=m2n22表示,由于要求互质,且为正整数,所以m,n必须同时为奇数,于是题目就变为了,求解这样得m,n的组数。不妨设mn

maxn为枚举当前m时的n的最大值
我们要求的是

m=12×L[m is odd]n=1maxn[gcd(n,m)=1]×[n is odd]

可以这样变形
m=12×Ln=1maxn[m is odd]d|n,mμ(d)×[n is odd]

调整枚举顺序
d=12Lμ(d)m=12Ld[m is odd]n=1maxnd[n×d is odd]

枚举dm时间复杂度O(nlog(n))

0 0
原创粉丝点击