用欧几里得法生成所有的本原勾股数组,再缩放生成一百五十万以内的勾股数组,最后记录每个周长出现的频次即可。结果是$161667$。
target=750000
d={}
for m in range(2,900):
for n in range(1,m):
p=m*m+m*n
a,b,c=sorted([m*m-n*n,2*m*n,m*m+n*n])
i=1
while i*p<=target:
if i*p in d:
d[i*p].add((i*a,i*b,i*c))
else:
d[i*p]=set([(i*a,i*b,i*c)])
i+=1
print sum(len(d[p])==1 for p in d)
|