euler/python/e138.py

33 lines
769 B
Python

from math import gcd
def euler_138():
count = 12
r, m, n = 0, 2, 1
while True:
if count == 0:
break
if (m - n) % 2 == 1 and gcd(m, n) == 1: # Ensure m and n are coprime and not both odd
a = m * m - n * n
b = 2 * m * n
c = m * m + n * n
if a > b:
a, b = b, a
assert a * a + b * b == c * c
if a * 2 - 1 == b or a * 2 + 1 == b:
# print(f"{m=} {n=} l={c}")
r += c # c is L
count -= 1
n = m
m *= 4
m += 1
return r
if __name__ == "__main__":
solution = euler_138()
print("e138.py: " + str(solution))
assert solution == 1118049290473932