33 lines
769 B
Python
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
|
|
|