0224 近勾股数二
* * * *
拉格朗日计划
* * * *
近勾股数一

若正整数$a,b,c$满足$a^2 + b^2 = c^2 - 1$,也称其为近勾股数。

这一类近勾股数中有多少组是满足$a\le b\le c$且$a+b+c$不超过七千五百万的?

本题难度:



解答

显然本题解法与上一题完全相同,将初值修改为$(2,2,3)$即可,结果是$4137330$。

def A(x,y,z):
  return x-2*y+2*z, 2*x-y+2*z, 2*x-2*y+3*z

def B(x,y,z):
  return 2*x+y+2*z, x+2*y+2*z, 2*x+2*y+3*z

def C(x,y,z):
  return -2*x+y+2*z, -x+2*y+2*z, -2*x+2*y+3*z

bound=75000000
r=0
h=[(2,2,3)]
while h:
  a,b,c=h.pop()
  r+=1

  u,v,w=A(a,b,c)
  if u+v+w<=bound:
      h.append((u,v,w))

  u,v,w=B(a,b,c)
  if u+v+w<=bound:
      h.append((u,v,w))
  
  if a!=b:
      u,v,w=C(a,b,c)
      if u+v+w<=bound:
          h.append((u,v,w))
      
  if r%1000000==0:
      print r/1000000,"million triples checked"

print r