Project Euler 311(2)

http://projecteuler.net/index.php?section=problems&id=311


かろうじて24時間以内に20位以内が埋まったらしい。
16着だったが、14着と1分38秒差、13着とは3時間半以上の差。これはミラクルとしか。30分くらい席を外して放置していて、見てみたらできていたのでアップした。まさかそんなに僅差だとは思わなかったので。

理屈は割と簡単です。2(x2 + y2) = z12 + w12 = z22 + w22を解くだけ(x = BO, y = AO, z1 = AB, w1 = AD, z2 = BC, w2 = CD)。xy平面上でx軸との角度が(0, π/4)にx2 + y2 = nという円周上の格子点の数を求めます。ガウス整数のところに書いた方法で求まります。またしても直前に書いた方法が使えるとは、預言者か?

そして、例えばそれが4つ(図の青い点)だとすると、図のようにzwも4つの組合せがあり(赤い点)、それは青い点にガウス平面で考えて1+iを掛けた点で、√2倍して45度回転させたことになります。x, yに対して45度回転したz, wを選ぶと、ちょうど三角形が潰れた形になります。z, wx, yから45度よりx軸との角度が小さいときに両方とも三角形になります。すなわち、図のPに対してはQ', R', S'の3点なら三角形になることになります。この3つのうち2つを選ぶので3通り、Qに対してはR', S'のうち2つを選ぶので1通り、nに対しては合計で4通りということになります。

ここまで分かればあとは簡単に解けそうなもんですが、ここからがこの問題の本題のようです。未だにいい方法が見つかりません。