Project Euler 9 別解

プロジェクトオイラー
http://projecteuler.net/index.php

Q9.
ピタゴラスの数の組合せで、和が1000ときの積

自然数m,nでm > nとして、


a = m2 - n2
b = 2mn
c = m2 + n2

とできる(ただし、aとbの大小は任意)。


a + b + c = 2m(m + n) < 4m2

これでかなり絞り込める。


from math import sqrt

def pythagorean(N):
if N % 2 == 1:
return -1

m = int(sqrt(N / 4)) + 1
while True:
n = N / (2 * m) - m
if n <= 0:
return -1
if N % (2 * m) == 0:
return 2 * m * n * (m ** 4 - n ** 4)
m += 1

N = 1000
print pythagorean(N)