Open In App

Rectangle with minimum possible difference between the length and the width

Last Updated : 09 Jan, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

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 the 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| are as minimal 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 up to. 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
?>

                    

Javascript

<script>
 
// Javascript 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)
    {
        let l = 0, b = 0;
        let M = Math.floor(Math.sqrt(area)), ans;
 
        for (let i = M; i >= 1; i--) {
 
            // i is a factor
            if (area % i == 0) {
 
                // l >= sqrt(area) >= i
                l = Math.floor(area / i);
 
                // so here l is +ve always
                b = i;
                break;
            }
        }
 
        // Here l and b are length and
        // breadth of the rectangle
        document.write("l = " + l + ", b = " + b);
    }
 
// Driver code
 
    let area = 99;
    find_rectangle(area);
     
</script>

                    

Output: 
l = 11, b = 9

 

Time Complexity: O(\sqrt{N}   )
Auxiliary Space: O(1)

Below is a 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.

                    

Javascript

<script>
// Javascript 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(are)
{
    for(let i = Math.floor(Math.ceil(Math.sqrt(area))); i <= area; i++)
        {
            if(Math.floor(area / i) * i == area)
            {
                document.write(i + " " + Math.floor(area / i));
                return;
            }
        }
}
 
 // Driver code
let area = 99;
find_rectangle(area);  
 
 
 
// This code is contributed by unknown2108
</script>

                    

Output: 
11 9

 

Time Complexity: O(log(area)), due to inbuild function sqrt()
Auxiliary Space: O(1)



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads