45 lines
1.1 KiB
Python
45 lines
1.1 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Created on 05 Jun 2021
|
|
|
|
@author: David Doblas Jiménez
|
|
@email: daviddoji@pm.me
|
|
|
|
Solution for problem 39 of Project Euler
|
|
https://projecteuler.net/problem=39
|
|
"""
|
|
|
|
from utils import timeit
|
|
|
|
|
|
@timeit("Problem 39")
|
|
def compute():
|
|
"""
|
|
If p is the perimeter of a right angle triangle with integral length sides,
|
|
{a,b,c}, there are exactly three solutions for p = 120:
|
|
|
|
{20,48,52}, {24,45,51}, {30,40,50}
|
|
|
|
For which value of p ≤ 1000, is the number of solutions maximised?
|
|
"""
|
|
ans, val = 0, 0
|
|
for p in range(2, 1001, 2):
|
|
sol = 0
|
|
for a in range(1, p):
|
|
for b in range(a+1, p-2*a):
|
|
c = p - (a + b)
|
|
if a**2 + b**2 == c**2:
|
|
sol += 1
|
|
elif a**2 + b**2 > c**2:
|
|
# As we continue our innermost loop, the left side
|
|
# gets bigger, right gets smaller, so we're done here
|
|
break
|
|
if sol > ans:
|
|
ans, val = sol, p
|
|
|
|
return val
|
|
|
|
if __name__ == "__main__":
|
|
|
|
print(f"Result for Problem 39: {compute()}")
|