# Count number of squares in a rectangle

Given a m x n rectangle, how many squares are there in it?

**Examples :**

Input: m = 2, n = 2 Output: 5 There are 4 squares of size 1x1 + 1 square of size 2x2. Input: m = 4, n = 3 Output: 20 There are 12 squares of size 1x1 + 6 squares of size 2x2 + 2 squares of size 3x3.

**Let us first solve this problem for m = n, i.e., for a square:**

For m = n = 1, output: 1

For m = n = 2, output: 4 + 1 [4 of size 1×1 + 1 of size 2×2]

For m = n = 3, output: 9 + 4 + 1 [4 of size 1×1 + 4 of size 2×2 + 1 of size 3×3]

For m = n = 4, output 16 + 9 + 4 + 1 [16 of size 1×1 + 9 of size 2×2 + 4 of size 3×3 + 1 of size 4×4]

In general, it seems to be n^2 + (n-1)^2 + … 1 = n(n+1)(2n+1)/6

**Let us solve this problem when m may not be equal to n:**

Let us assume that m <= n

From above explanation, we know that number of squares in a m x m matrix is m(m+1)(2m+1)/6

What happens when we add a column, i.e., what is the number of squares in m x (m+1) matrix?

When we add a column, number of squares increased is m + (m-1) + … + 3 + 2 + 1

[m squares of size 1×1 + (m-1) squares of size 2×2 + … + 1 square of size m x m]

Which is equal to m(m+1)/2

So when we add (n-m) columns, total number of squares increased is (n-m)*m(m+1)/2.

So total number of squares is m(m+1)(2m+1)/6 + (n-m)*m(m+1)/2.

Using same logic we can prove when n <= m.

So, in general,

Total number of squares = m x (m+1) x (2m+1)/6 + (n-m) x m x (m+1)/2 when n is larger dimension

.

Using above logic for rectangle, we can also prove that number of squares in a square is n(n+1)(2n+1)/6

Below is implementation of above formula.

## C++

`// C++ program to count squares ` `// in a rectangle of size m x n ` `#include<iostream> ` `using` `namespace` `std; ` ` ` `// Returns count of all squares ` `// in a rectangle of size m x n ` `int` `countSquares(` `int` `m, ` `int` `n) ` `{ ` `// If n is smaller, swap m and n ` `if` `(n < m) ` ` ` `swap(m, n); ` ` ` `// Now n is greater dimension, ` `// apply formula ` `return` `m * (m + 1) * (2 * m + 1) / ` ` ` `6 + (n - m) * m *(m + 1) / 2; ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` `int` `m = 4, n = 3; ` `cout << ` `"Count of squares is "` ` ` `<< countSquares(m, n); ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to count squares ` `// in a rectangle of size m x n ` ` ` `class` `GFG ` `{ ` ` ` `// Returns count of all squares ` ` ` `// in a rectangle of size m x n ` ` ` `static` `int` `countSquares(` `int` `m, ` ` ` `int` `n) ` ` ` `{ ` ` ` `// If n is smaller, swap m and n ` ` ` `if` `(n < m) ` ` ` `{ ` ` ` `// swap(m, n) ` ` ` `int` `temp = m; ` ` ` `m = n; ` ` ` `n = temp; ` ` ` `} ` ` ` ` ` ` ` `// Now n is greater dimension, ` ` ` `// apply formula ` ` ` `return` `m * (m + ` `1` `) * (` `2` `* m + ` `1` `) / ` ` ` `6` `+ (n - m) * m * (m + ` `1` `) / ` `2` `; ` ` ` `} ` ` ` ` ` `// Driver Code ` ` ` `public` `static` `void` `main(String[] args) ` ` ` `{ ` ` ` `int` `m = ` `4` `, n = ` `3` `; ` ` ` `System.out.println(` `"Count of squares is "` `+ ` ` ` `countSquares(m, n)); ` ` ` `} ` `} ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program to count squares ` `# in a rectangle of size m x n ` ` ` `# Returns count of all squares ` `# in a rectangle of size m x n ` `def` `countSquares(m, n): ` ` ` ` ` `# If n is smaller, swap m and n ` ` ` `if` `(n < m): ` ` ` `temp ` `=` `m ` ` ` `m ` `=` `n ` ` ` `n ` `=` `temp ` ` ` ` ` `# Now n is greater dimension, ` ` ` `# apply formula ` ` ` `return` `((m ` `*` `(m ` `+` `1` `) ` `*` `(` `2` `*` `m ` `+` `1` `) ` `/` ` ` `6` `+` `(n ` `-` `m) ` `*` `m ` `*` `(m ` `+` `1` `) ` `/` `2` `)) ` ` ` `# Driver Code ` `if` `__name__` `=` `=` `'__main__'` `: ` ` ` `m ` `=` `4` ` ` `n ` `=` `3` ` ` `print` `(` `"Count of squares is "` ` ` `,countSquares(m, n)) ` ` ` `# This code is contributed by mits. ` |

*chevron_right*

*filter_none*

## C#

`// C# program to count squares in a rectangle ` `// of size m x n ` `using` `System; ` ` ` `class` `GFG { ` ` ` ` ` `// Returns count of all squares in a ` ` ` `// rectangle of size m x n ` ` ` `static` `int` `countSquares(` `int` `m, ` `int` `n) ` ` ` `{ ` ` ` `// If n is smaller, swap m and n ` ` ` `if` `(n < m) ` ` ` `{ ` ` ` `// swap(m,n) ` ` ` `int` `temp = m; ` ` ` `m = n; ` ` ` `n = temp; ` ` ` `} ` ` ` ` ` `// Now n is greater dimension, apply ` ` ` `// formula ` ` ` `return` `m * (m + 1) * (2 * m + 1) / 6 + ` ` ` `(n - m) * m * (m + 1) / 2; ` ` ` `} ` ` ` ` ` `// Driver method ` ` ` `public` `static` `void` `Main() ` ` ` `{ ` ` ` `int` `m = 4, n = 3; ` ` ` ` ` `Console.WriteLine(` `"Count of squares is "` ` ` `+ countSquares(m, n)); ` ` ` `} ` `} ` ` ` `//This code is contributed by vt_m. ` |

*chevron_right*

*filter_none*

## PHP

`<?php ` `// PHP program to count squares ` `// in a rectangle of size m x n ` ` ` `// Returns count of all squares ` `// in a rectangle of size m x n ` `function` `countSquares(` `$m` `, ` `$n` `) ` `{ ` ` ` `// If n is smaller, swap m and n ` ` ` `if` `(` `$n` `< ` `$m` `) ` ` ` `list(` `$m` `, ` `$n` `) = ` `array` `(` `$n` `, ` `$m` `); ` ` ` ` ` `// Now n is greater dimension, ` ` ` `// apply formula ` ` ` `return` `$m` `* (` `$m` `+ 1) * (2 * ` `$m` `+ 1) / ` ` ` `6 + (` `$n` `- ` `$m` `) * ` `$m` `* (` `$m` `+ 1) / 2; ` `} ` ` ` `// Driver Code ` `$m` `= 4; ` `$n` `= 3; ` `echo` `(` `"Count of squares is "` `. countSquares(` `$m` `, ` `$n` `)); ` ` ` `// This code is contributed by Ajit. ` `?> ` |

*chevron_right*

*filter_none*

**Output :**

Count of Squares is 20

**Alternate Solution :**

Let us take m = 2, n = 3;

The number of squares of side 1 will be 6 as there will be two cases one as squares of 1-unit sides along the horizontal(2) and second case as squares of 1-unit sides along the vertical(3). that give us 2*3 = 6 squares.

When the side is 2 units, one case will be as squares of side of 2 units along only one place horizontally and second case as two places vertically. So number of squares=2

So we can deduce that

Number of squares of size 1*1 will be m*n

Number of squares of size 2*2 will be (n-1)(m-1)

So like this the number of squares of size n will be 1*(m-n+1)

The final formula for total number of squares will be **n*(n+1)(3m-n+1)/6**

Thanks to Pranav for providing this alternate solution.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above

## Recommended Posts:

- Number of squares of maximum area in a rectangle
- Number of squares of side length required to cover an N*M rectangle
- Minimum squares to cover a rectangle
- Minimum squares to evenly cut a rectangle
- Count number less than N which are product of perfect squares
- Count the number of rhombi possible inside a rectangle of given size
- Count the total number of squares that can be visited by Bishop in one move
- Program to count number of distinct Squares and Cubes upto N
- Count pairs (a, b) whose sum of squares is N (a^2 + b^2 = N)
- Count Magic squares in a grid
- Count squares with odd side length in Chessboard
- Minimum number of squares whose sum equals to given number n
- Ratio of area of a rectangle with the rectangle inscribed in it
- Largest subset of rectangles such that no rectangle fit in any other rectangle
- Number of ways of writing N as a sum of 4 squares