http://projecteuler.net/index.php?section=problems&id=91
点Pを軸上以外に取って、Pを通りOPに垂直に直線を引く。その直線上の格子点がQ。
f n = 3 * n * n + sum [ g (x,y) | x <- [1..n], y <- [1..n] ] g (x,y) = (min (div x dx) (div (n - y) dy)) + (min (div y dy) (div (n - x) dx)) where d = gcd x y dx = div y d dy = div x d n = 50 main = print (f n)