设三边长分别为a,b,c,面积为S,周长为C,显然S应是整数。
a,b,c和S均为整数的三角形称为Heronian三角形,不过直接使用该页面的生成公式似乎无法正确计数。
此处使用的是该论文中定理2的结果,按定理2的命题枚举生成各参数后计数即得结果$28038042525570324$。
注:为减少代码量,以下代码中使用Sympy库的divisors函数来生成约数列表,故此为Python 3代码,且代码中打印了运行进度。
from sympy import divisors
from math import gcd,sqrt
s=set()
r=0
for m in range(1,1001):
for u in divisors(2*m):
for v in range(1,int(sqrt(3)*u)+1):
if gcd(u,v)==1:
n=4*m*m*(u*u+v*v)
for d1 in divisors(n):
d2=n//d1
if d1<=d2 and (d1+2*m*u)%v==0 and (d2+2*m*u)%v==0:
a=(d1+2*m*u)//v+(2*m*v)//u
b=(d2+2*m*u)//v+(2*m*v)//u
c=(d1+d2+4*m*u)//v
k=(min(a,b,c),a+b+c-min(a,b,c)-max(a,b,c),max(a,b,c))
if k not in s:
s.add(k)
r+=a+b+c
print("m=",m,"checked,current r:",r)
print(r)
|