import time
def find_pythagorean(s):
""" Yield all Pythagorean triples that sum to positive integer s """
if s % 2:
return # No triples sum to an odd number
hs2 = s * s / 2
for a in xrange(1, int(s * (1 - .5**.5)) + 1):
if (hs2 - s * a) % (s - a) == 0:
b = (hs2 - s * a) / (s - a)
yield a, b, s - a - b
def test(s):
start = time.time()
print list(find_pythagorean(s))
print 'Time taken', time.time() - start
test(1000)
test(1356780)
aW1wb3J0IHRpbWUKCmRlZiBmaW5kX3B5dGhhZ29yZWFuKHMpOgogICAgIiIiIFlpZWxkIGFsbCBQeXRoYWdvcmVhbiB0cmlwbGVzIHRoYXQgc3VtIHRvIHBvc2l0aXZlIGludGVnZXIgcyAiIiIKICAgIGlmIHMgJSAyOgogICAgICAgIHJldHVybiAgICAgICAgICAjIE5vIHRyaXBsZXMgc3VtIHRvIGFuIG9kZCBudW1iZXIKICAgIGhzMiA9IHMgKiBzIC8gMgogICAgZm9yIGEgaW4geHJhbmdlKDEsIGludChzICogKDEgLSAuNSoqLjUpKSArIDEpOgogICAgICAgIGlmIChoczIgLSBzICogYSkgJSAocyAtIGEpID09IDA6CiAgICAgICAgICAgIGIgPSAoaHMyIC0gcyAqIGEpIC8gKHMgLSBhKQogICAgICAgICAgICB5aWVsZCBhLCBiLCBzIC0gYSAtIGIKCmRlZiB0ZXN0KHMpOgogICAgc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgcHJpbnQgbGlzdChmaW5kX3B5dGhhZ29yZWFuKHMpKQogICAgcHJpbnQgJ1RpbWUgdGFrZW4nLCB0aW1lLnRpbWUoKSAtIHN0YXJ0Cgp0ZXN0KDEwMDApICAgCnRlc3QoMTM1Njc4MCkKCg==
[(200, 375, 425)]
Time taken 0.000113010406494
[(226130, 542712L, 587938L), (339195, 452260L, 565325L)]
Time taken 0.306120872498