70 lines
1.6 KiB
Python

#!/usr/bin/python3
# A Pythagorean triplet is a set of three natural numbers, a < b < c, for which,
#
# a2 + b2 = c2
#
# For example, 32 + 42 = 9 + 16 = 25 = 52.
#
# There exists exactly one Pythagorean triplet for which a + b + c = 1000.
#
# Find the product abc.
from math import gcd
from timeit import default_timer
def main():
start = default_timer()
found = 0
m = 2
# Brute force approach: generate all the Pythagorean triplets using
# Euclid's formula, until the one where a+b+c=1000 is found.
while not found:
for n in range(1, m):
if found == 1:
break
if gcd(m, n) == 1 and (m % 2 == 0 and n % 2 != 0 or m % 2 != 0 and n % 2 == 0):
a = m * m - n * n
b = 2 * m * n
c = m * m + n * n
if a + b + c == 1000:
found = 1
break
i = 2
while True:
tmpa = a * i
tmpb = b * i
tmpc = c * i
if tmpa + tmpb + tmpc == 1000:
a = tmpa
b = tmpb
c = tmpc
found = 1
break
if tmpa + tmpb + tmpc > 1000:
break
i = i + 1
m = m + 1
end = default_timer()
print('Project Euler, Problem 9')
print('Answer: {}'.format(a * b * c))
print('Elapsed time: {:.9f} seconds'.format(end - start))
if __name__ == '__main__':
main()