T与ABC连线所形成的三个夹角都是120度,因此由余弦定理可得
$$(p^*)^2+(q^*)^2+p^*q^*=b^2, \quad (p^*)^2+(r^*)^2+p^*r^*=c^2, \quad (q^*)^2+(r^*)^2+q^*r^*=a^2.$$
因此需要找到能令$(p^*)^2+(q^*)^2+p^*q^*$、$(p^*)^2+(r^*)^2+p^*r^*$、$(q^*)^2+(r^*)^2+q^*r^*$均为完全平方数的$p^*,q^*,r^*$。
根据此帖的内容,满足
$$u^2+v^2+uv=w^2$$
的本原(即$\gcd(u,v,w)=1$)三元组$(u,v,w)$可以由互素且差不被3的整除的数对$(m,n)$用以下方式
$$u=m^2-n^2, \quad v=2mn+n^2, \quad w=m^2+n^2+mn$$
生成。
用这一方法生成所有的$p^*,q^*,r^*$并按其和$p^*+q^*+r^*$去重(满足要求的三元组共有508组,其中有些的和是重复的)即可得结果$30758397$。
注:以下代码为Python3,因Python2中无math.gcd函数。(Python2中可以使用fractions.gcd)
import math
d={}
for m in range(2,350):
for n in range(1,m):
if math.gcd(m,n)==1 and (m-n)%3>0:
a,b=m*m-n*n,2*m*n+n*n
a,b=min(a,b),max(a,b)
k=1
while (a+b)*k < 120000:
if a*k in d:
d[a*k].add(b*k)
else:
d[a*k]=set([b*k])
k+=1
print(len(d))
s=set()
for p in d:
for q in d[p]:
if q in d:
for r in d[q] & d[p]:
if p+q+r<=120000:
s.add(p+q+r)
print(sum(s))
|