forked from nayuki/Project-Euler-solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathp028.hs
22 lines (19 loc) · 896 Bytes
/
p028.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{-
- Solution to Project Euler problem 28
- Copyright (c) Project Nayuki. All rights reserved.
-
- https://www.nayuki.io/page/project-euler-solutions
- https://github.com/nayuki/Project-Euler-solutions
-}
{-
- From the diagram, let's observe the four corners of an n * n square (where n is odd).
- It's not hard to convince yourself that the top right corner always has the value n^2.
- Working counterclockwise (backwards), the top left corner has the value n^2 - (n - 1),
- the bottom left corner has the value n^2 - 2(n - 1), and the bottom right is n^2 - 3(n - 1).
- Putting it all together, this outermost ring contributes 4n^2 - 6(n - 1) to the final sum.
-
- Incidentally, the closed form of this sum is (4m^3 + 3m^2 + 8m - 9) / 6, where m = size.
-}
size = 1001 -- Must be odd
main = putStrLn (show ans)
ans = 1 + sum [4 * n * n - 6 * (n - 1) | n <- [3, 5 .. size]]