Open In App

Number of unique rectangles formed using N unit squares

Improve
Improve
Like Article
Like
Save
Share
Report

You are given N unit squares (squares with side length 1 unit), and you are asked to make rectangles using these squares. You have to count the number of rotationally unique rectangles than you can make. What does rotationally unique mean? Well, two rectangles are rotationally unique if one can’t be rotated to become equivalent to the other one. 

Example – The 4×2 rectangle can be rotated 90 degrees clockwise to make it the exact same as the 2×4 rectangle and so these are not rotationally unique. 
 

Number of unique rectangles formed using N unit squares

Examples : 

Input : N = 4
Output : 5
We can make following five rectangles 
1 x 1, 1 x 2, 2 x 2, 1 x 3 and 1 x 4

Input : N = 5
Output : 6

Input : 6
Output : 8
Recommended Practice

So how do we solve this problem? 
Every rectangle is uniquely determined by its length and its height. 
A rectangle of length = l and height = h then l * h <= n is considered equivalent to a rectangle with length = h and height = l provided l is not equal to h. If we can have some sort of “ordering” in these pairs then we can avoid counting (l, h) and (h, l) as different rectangles. One way to define such an ordering is: 

Assume that length <= height and count for all such pairs such that length*height <= n. 
We have, length <= height 
or, length*length <= length*height 
or, length*length <= n 
or, length <= sqrt(n) 

C++





Java




<div id="highlighter_899625" class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// Java program to count rotationally equivalent</code></div><div class="line number2 index1 alt1"><code class="comments">// rectangles with n unit squares</code></div><div class="line number3 index2 alt2"><code class="keyword">class</code> <code class="plain">GFG {</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">    </code> </div><div class="line number5 index4 alt2"><code class="undefined spaces">    </code><code class="keyword">static</code> <code class="keyword">int</code> <code class="plain">countRect(</code><code class="keyword">int</code> <code class="plain">n)</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">    </code><code class="plain">{</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">        </code><code class="keyword">int</code> <code class="plain">ans = </code><code class="value">0</code><code class="plain">;</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">        </code> </div><div class="line number9 index8 alt2"><code class="undefined spaces">        </code><code class="keyword">for</code> <code class="plain">(</code><code class="keyword">int</code> <code class="plain">length = </code><code class="value">1</code><code class="plain">; length <= Math.sqrt(n);</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">                                           </code><code class="plain">++length)</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">            </code><code class="keyword">for</code> <code class="plain">(</code><code class="keyword">int</code> <code class="plain">height = length; height*length <= n;</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">                                                </code><code class="plain">++height)</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">                </code><code class="comments">// height >= length is maintained</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">                </code><code class="plain">ans++;</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">            </code> </div><div class="line number16 index15 alt1"><code class="undefined spaces">        </code><code class="keyword">return</code> <code class="plain">ans;</code></div><div class="line number17 index16 alt2"><code class="undefined spaces">    </code><code class="plain">}</code></div><div class="line number18 index17 alt1"><code class="undefined spaces">    </code> </div><div class="line number19 index18 alt2"><code class="undefined spaces">    </code><code class="comments">//driver code</code></div><div class="line number20 index19 alt1"><code class="undefined spaces">    </code><code class="keyword">public</code> <code class="keyword">static</code> <code class="keyword">void</code> <code class="plain">main (String[] args)</code></div><div class="line number21 index20 alt2"><code class="undefined spaces">    </code><code class="plain">{</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">        </code><code class="keyword">int</code> <code class="plain">n = </code><code class="value">5</code><code class="plain">;</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">        </code> </div><div class="line number24 index23 alt1"><code class="undefined spaces">        </code><code class="plain">System.out.print(countRect(n));</code></div><div class="line number25 index24 alt2"><code class="undefined spaces">    </code><code class="plain">}</code></div><div class="line number26 index25 alt1"><code class="plain">}</code></div><div class="line number27 index26 alt2"> </div><div class="line number28 index27 alt1"><code class="comments">// This code is contributed by Anant Agarwal.</code></div></div></td></tr></tbody></table></div>


Python3





C#





PHP





Javascript





Output : 

6 

Time Complexity: O(n?n) 
Auxiliary Space: O(1)

 



Last Updated : 22 Jun, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads