Project Euler Problem 039

http://projecteuler.net/index.php?section=problems&id=39
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2039

辺の長さが{a,b,c}と整数の3つ組である直角三角形を考え, その周囲の長さをpとする.
p = 120のときには3つの解が存在する:
  
  {20,48,52}, {24,45,51}, {30,40,50}
  
p ≦ 1000 で解の数が最大になる p を求めよ.

いまいち

import datetime


def f(p):
    cnt = 0
    for a in xrange(1,p/3):
        aa = a*a
        for b in xrange(a+1,(p-a-1)/2+1):
            c = p - a - b
            if aa + b*b == c*c:
                cnt += 1
    return cnt


def euler039():
    maxp = 0
    maxv = 0
    
    for p in xrange(6, 1001, 2):
        v = f(p)
        if v > maxv:
            maxp = p
            maxv = v
            print '', maxp, maxv

    print maxp, maxv
    

begin = datetime.datetime.now()
euler039()
end = datetime.datetime.now()
print end - begin

答え: 840
実行時間: 5.044749秒くらい