Project Euler 75

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

Q75.
直角三角形の周の長さで辺の組合せが一通りしかない200万以下のもの

辺の長さは既約なら、m2 - n2, 2mn, m2 + n2だから、周の長さL=2m(m+n)。L/2 = kml (m
import fractions
from math import sqrt

N = 2 * 10 ** 6
M = N / 2
ROOTM = int(sqrt(M + 0.5))

ary = [ 0 for i in xrange(M + 1) ]
for m in range(1, ROOTM + 1):
for l in range(m + 1, min(m * 2, M / m + 1)):
if l % 2 == 0:
continue
ml = m * l
n = l - m
a = m * m - n * n
b = 2 * m * n
if fractions.gcd(a, b) != 1:
continue
for q in range(ml, M + 1, ml):
ary[q] += 1

print sum(map(lambda x: x == 1, ary))