Project Euler 218

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

Q218.
辺の長さが互いに素である整数の直角三角形で、斜辺が平方数の場合、完全直角三角形と呼ぶ。さらに、完全数である6と28の倍数である場合、超完全であるとする。
斜辺の長さが1016の完全直角三角形で、超完全でないものはいくつあるか?

辺の長さは、m2 - n2、2mnm2 + n2で表される。最後のものが平方数なのだから、m = |m02 - n02|、n = 2m0n0となる。面積Sは、

S = 2m0n0|m02 - n02||m04 - 6m02n02 + n04|

と表される。
これが常に6で割り切れるはすぐに分かる。
次に28で割り切れるかはPythonで組んでみた。何度もやり直した。



p = 7
a = [ [ 0 ] * p for n in range(p) ]
print a
for m in range(p):
for n in range(p):
s = (m * n * (m ** 2 - n ** 2)
* abs(6 * m * m * n * n - m ** 4 - n ** 4))
a[m][n] = s % (p * 2)
print a