==> combinatorics/grid.dissection.s <==
Given an n*m grid with n > m.
Orient the grid so n is its width. Divide the grid into two portions,
an m*m square on the left and an (n-m)*m rectangle on the right.
Count the squares that have their upper right-hand corners in the
m*m square. There are m^2 of size 1*1, (m-1)^2 of size 2*2, ...
up to 1^2 of size m*m. Now look at the n-m columns of lattice points
in the rectangle on the right, in which we find upper right-hand
corners of squares not yet counted. For each column we count m new
1*1 squares, m-1 new 2*2 squares, ... up to 1 new m*m square.
Combining all these counts in summations:
m m
total = sum i^2 + (n - m) sum i
i=1 i=1
(2m + 1)(m + 1)m (n - m)(m + 1)m
= ---------------- + ---------------
6 2
= (3n - m + 1)(m + 1)m/6
-- David Karr