Problem 28

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

21 22 23 24 25
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13

5*5の2つの斜めの合計 ((21+7+1+3+13) + (25+9+1+5+17) - 1) は 101 である。
1,001*1,001のとき、2つの斜めの合計は何か?
階差数列なので次のように一般化できる。

1+\sum_{i=0}^{n-1} (6+8i) ... 1+\sum_{i=0}^{n-1} (8+8i)
... 1 ...
1+\sum_{i=0}^{n-1} (4+8i) ... 1+\sum_{i=0}^{n-1} (2+8i)


展開して、

4n^2+2n+1 ... 4n^2+4n+1
... 1 ...
4n^2+1 ... 4n^2-2n+1

だから

\sum_{i=0}^{|\frac{1001}{2}|} \left((4i^2+4i+1) + (4i^2+2i+1) + (4i^2+1) + (4i^2-2i+1)\right) - 3

=\sum_{i=0}^{|\frac{1001}{2}|} (16i^2+4i+4) - 3

=4\sum_{i=0}^{|\frac{1001}{2}|} (4i^2+i+1) - 3

main = print $ 4 * sum [ 4 * i * i + i + 1 | i <- [0..(1001 `div` 2)]] - 3

これは、つまらん解き方だな。