Kibbee.ca
icon
Project Euler: Problem 9

There exists exactly one Pythagorean triplet for which a + b + c = 1000. Find the product abc.

[Full Question]

#A Pythagorean triplet is a set of three natural numbers, a  < b  < c, for which,
#a^(2) + b^(2) = c^(2)

#For example, 3^(2) + 4^(2) = 9 + 16 = 25 = 5^(2).

#There exists exactly one Pythagorean triplet for which a + b + c = 1000.
#Find the product abc.

from math import sqrt 

FoundPythTriplet = False

for a in range(1,333):    
    for b in range(a+1,1000-a*2):
        c = sqrt(a**2 + b**2)
        
        if a + b + c == 1000:
            FoundPythTriplet = True
            break
    if FoundPythTriplet:
        break

product = a * b * c    
    
print "The values of (A,B,C) are (%d,%d,%d)" % (a,b,c)
print "The product is %d" % (product,)

[Download Code]

I did a pretty simple solution here. Loop through the values for a from 1 to 332. Since A < B < C, and A + B + C = 1000, then A must be less than 333. From there I loop through values of B, starting at A + 1 and going to 1000 - a * 2, since B must be greater than A, and C is greater than B, so this ensures we don't check values where I end up calculating a C where A + B + C is greater than 1000. I find C by calculating it according to the pythagorean theorem. And then I add the values to see if they equal 1000. Since the question states there is only one set of values for A,B,C, I immediately stop after finding the answer.

magic numbers
The thing that sticks out for me is the use of "magic" numbers.

You could have defined 1000 once as a constant, rather than having it written a couple of times (and even having a number derived from it: 333).

Just my 0.02 $