Skip to content
Related Articles

Related Articles

Rectangle with minimum possible difference between the length and the width
  • Difficulty Level : Medium
  • Last Updated : 01 Feb, 2021

Given an integer area, the task is to find the length and breadth of a rectangle with the given area such that the difference between the length and the breadth is minimum possible.
Examples: 
 

Input: area = 99 
Output: l = 11, b = 9 
All possible rectangles (l, b) are (99, 1), (33, 3) and (11, 9) 
And the one with the minimum |l – b| is (11, 9)
Input: area = 25 
Output: l = 5, b = 5 
 

 

Approach: The task is to find two integers l and b such that l * b = area and |l – b| is as minimum as possible. Factorization can be used to solve the problem but doing just simple factorization from 1 to N will take a long time to get the required output for larger values of N
To overcome this, just iterate upto       . Considering       < l ≤ N, then for all values of l, b will always be       .
Below is the implementation of the above approach: 
 

C++




// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to print the length (l)
// and breadth (b) of the rectangle
// having area = N and |l - b| as
// minimum as possible
void find_rectangle(int area)
{
    int l, b;
    int M = sqrt(area), ans;
 
    for (int i = M; i >= 1; i--) {
 
        // i is a factor
        if (area % i == 0) {
 
            // l >= sqrt(area) >= i
            l = (area / i);
 
            // so here l is +ve always
            b = i;
            break;
        }
    }
 
    // Here l and b are length and
    // breadth of the rectangle
    cout << "l = " << l << ", b = "
         << b << endl;
}
 
// Driver code
int main()
{
    int area = 99;
    find_rectangle(area);
    return 0;
}

Java




// Java implementation of the approach
class GFG {
 
    // Function to print the length (l)
    // and breadth (b) of the rectangle
    // having area = N and |l - b| as
    // minimum as possible
    static void find_rectangle(int area)
    {
        int l = 0, b = 0;
        int M = (int)Math.sqrt(area), ans;
 
        for (int i = M; i >= 1; i--) {
 
            // i is a factor
            if (area % i == 0) {
 
                // l >= sqrt(area) >= i
                l = (area / i);
 
                // so here l is +ve always
                b = i;
                break;
            }
        }
 
        // Here l and b are length and
        // breadth of the rectangle
        System.out.println("l = " + l + ", b = " + b);
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int area = 99;
        find_rectangle(area);
    }
}
 
// This code is contributed by Ita_c.

Python3




# Python3 implementation of the approach
import math as mt
 
# Function to print the length (l)
# and breadth (b) of the rectangle
# having area = N and |l - b| as
# minimum as possible
def find_rectangle(area):
 
    l, b = 0, 0
    M = mt.ceil(mt.sqrt(area))
    ans = 0
 
    for i in range(M, 0, -1):
 
        # i is a factor
        if (area % i == 0):
 
            # l >= sqrt(area) >= i
            l = (area // i)
 
            # so here l is + ve always
            b = i
            break
         
    # Here l and b are length and
    # breadth of the rectangle
    print("l =", l, ", b =", b)
 
# Driver code
area = 99
find_rectangle(area)
 
# This code is contributed by
# Mohit kumar 29

C#




// C# implementation of the approach
using System;
class GFG {
 
    // Function to print the length (l)
    // and breadth (b) of the rectangle
    // having area = N and |l - b| as
    // minimum as possible
    static void find_rectangle(int area)
    {
        int l = 0, b = 0;
        int M = (int)Math.Sqrt(area);
 
        for (int i = M; i >= 1; i--) {
 
            // i is a factor
            if (area % i == 0) {
 
                // l >= sqrt(area) >= i
                l = (area / i);
 
                // so here l is +ve always
                b = i;
                break;
            }
        }
 
        // Here l and b are length and
        // breadth of the rectangle
        Console.WriteLine("l = " + l + ", b = " + b);
    }
 
    // Driver code
    public static void Main()
    {
        int area = 99;
        find_rectangle(area);
    }
}
 
// This code is contributed by Mukul Singh.

PHP




<?php
// Php implementation of the approach
 
// Function to print the length (l)
// and breadth (b) of the rectangle
// having area = N and |l - b| as
// minimum as possible
function find_rectangle($area)
{
    $M = floor(sqrt($area));
 
    for ($i = $M; $i >= 1; $i--)
    {
 
        // i is a factor
        if ($area % $i == 0)
        {
 
            // l >= sqrt(area) >= i
            $l = floor($area / $i);
 
            // so here l is +ve always
            $b = $i ;
            break;
        }
    }
 
    // Here l and b are length and
    // breadth of the rectangle
    echo "l = ", $l, ", b = ", $b, "\n";
}
 
// Driver code
$area = 99;
find_rectangle($area);
 
// This code is contributed by Ryuga
?>
Output: 



l = 11, b = 9

 

Time Complexity: O(\sqrt{N}       )
Below is simple implementation. 
 

CPP




// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to print the length (l)
// and breadth (b) of the rectangle
// having area = N and |l - b| as
// minimum as possible
void find_rectangle(int area)
{
    for (int i = ceil(sqrt(area)); i <= area; i++) {
        if (area / i * i == area) {
            printf("%d %d", i, area / i);
            return;
        }
    }
}
 
// Driver code
int main()
{
    int area = 99;
    find_rectangle(area);
    return 0;
}

Java




// Java implementation of the approach
import java.io.*;
class GFG {
    // Function to print the length (l)
    // and breadth (b) of the rectangle
    // having area = N and |l - b| as
    // minimum as possible
    static void find_rectangle(int area)
    {
        for(int i = (int)Math.ceil(Math.sqrt(area)); i <= area; i++)
        {
            if(area / i * i == area)
            {
                System.out.println(i + " " + (int)(area / i));
                return;
            }
        }
    }
   
    // Driver code
    public static void main (String[] args)
    {
        int area = 99;
        find_rectangle(area);       
    }
}
 
// This code is contributed by rag2127

Python3




# Python3 implementation of the approach
import math
 
# Function to print the length (l)
# and breadth (b) of the rectangle
# having area = N and |l - b| as
# minimum as possible
def find_rectangle(area):
    for i in range(int(math.ceil(math.sqrt(area))) , area + 1):
        if((int(area / i) * i) == area):
            print(i, int(area / i))
            return
 
# Driver code
area = 99
find_rectangle(area)
 
# This code is contributed by avanitrachhadiya2155

C#




// C# implementation of the approach
using System;
class GFG
{
 
  // Function to print the length (l)
  // and breadth (b) of the rectangle
  // having area = N and |l - b| as
  // minimum as possible
  static void find_rectangle(int area)
  {
    for(int i = (int)Math.Ceiling(Math.Sqrt(area)); i <= area; i++)
    {
      if(area / i * i == area)
      {
        Console.WriteLine(i + " " + (int)(area / i));
        return;
      }
    }
  }
 
  // Driver code
  static void Main()
  {
    int area = 99;
    find_rectangle(area);
  }
}
 
// This code is contributed by divyeshrabadiya07.
Output: 
11 9

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live and Geeks Classes Live USA

My Personal Notes arrow_drop_up
Recommended Articles
Page :