Problem 9

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.

Solution 1: Stupid Brute Forcing

import math

def tri(n): for i in range(1, n): for j in range(i+1, n): if i + j + math.sqrt(i**2 + j**2) == float(n): return i*j*int(math.sqrt(i**2 + j**2))

print(tri(1000))

This run: ~0.3749995231628418. It is much less stupid than I imagined at first.
The output: 31875000

Just making n to (n - i)//2 in the second for loop for making hypotanous bigger.

initial = time()

def tri(n): for i in range(1, n): for j in range(i, (n - i)//2): # changed from n if i + j + math.sqrt(i**2 + j**2) == n: return i*j*int(math.sqrt(i**2 + j**2))

print(tri(1000))

This run: ~0.1249995231628418. Halved.
The output: 31875000

Solution 2: Smartest way

[The m,n formula for generating Pythagorean Triples. Read here!](https://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Pythag/pythag.html#section2.3)

def tri(num): for m in range(num): for n in range(1,m): a = m**2-n**2 b = 2*m*n c = m**2+n**2 tot = a + b + c
# We got primitive which can # be multiplied to make answer if not num%tot: return (num // tot)**3 * (a * b * c)

print(tri(1000))

This run: ~0.0. That is it.
The output: 31875000