42 lines
897 B
Python
42 lines
897 B
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
from math import sqrt
|
||
|
from itertools import combinations
|
||
|
|
||
|
def is_square(n):
|
||
|
return int(sqrt(n))**2 == n
|
||
|
|
||
|
zbound = 10**6
|
||
|
|
||
|
zs = [[] for i in range(zbound)]
|
||
|
|
||
|
c = 1
|
||
|
while c - 2 < len(zs):
|
||
|
d = c-2
|
||
|
while d > 0 and (c**2 - d**2) // 2 < len(zs):
|
||
|
zs[(c**2 - d**2) // 2].append((c**2 + d**2) // 2)
|
||
|
d -= 2
|
||
|
c += 1
|
||
|
|
||
|
max_z = None
|
||
|
min_sum = None
|
||
|
for z in range(1, len(zs)):
|
||
|
if max_z != None and z > max_z:
|
||
|
#print("found")
|
||
|
break
|
||
|
nums = sorted(zs[z])[::-1]
|
||
|
if len(nums) < 2:
|
||
|
continue
|
||
|
|
||
|
for cd, ef in combinations(nums, 2):
|
||
|
if is_square(cd + ef) and is_square(cd - ef):
|
||
|
x = cd
|
||
|
y = ef
|
||
|
#print(x, y, z)
|
||
|
if min_sum == None or min_sum > x + y + z:
|
||
|
min_sum = x + y + z
|
||
|
if max_z == None or x < max_z:
|
||
|
max_z = x
|
||
|
|
||
|
print(min_sum)
|