Given a rectangular sheet of length l and width w. we need to divide this sheet into square sheets such that the number of square sheets should be as minimum as possible.
Examples:
Input :l= 4 w=6
Output :6
We can form squares with side of 1 unit, But the number of squares will be 24, this is not minimum. If we make square with side of 2, then we have 6 squares. and this is our required answer.
And also we can't make square with side 3, if we select 3 as square side, then whole sheet can't be converted into squares of equal length.
Input :l=3 w=5
Output :15
Optimal length of the side of a square is equal to GCD of two numbers
// CPP program to find minimum number of
// squares to make a given rectangle.
#include <bits/stdc++.h>
using namespace std;
int countRectangles(int l, int w)
{
// if we take gcd(l, w), this
// will be largest possible
// side for square, hence minimum
// number of square.
int squareSide = __gcd(l, w);
// Number of squares.
return (l * w) / (squareSide * squareSide);
}
// Driver code
int main()
{
int l = 4, w = 6;
cout << countRectangles(l, w) << endl;
return 0;
}
// Java program to find minimum number of
// squares to make a given rectangle.
class GFG{
static int __gcd(int a, int b) {
if (b==0) return a;
return __gcd(b,a%b);
}
static int countRectangles(int l, int w)
{
// if we take gcd(l, w), this
// will be largest possible
// side for square, hence minimum
// number of square.
int squareSide = __gcd(l, w);
// Number of squares.
return (l * w) / (squareSide * squareSide);
}
// Driver code
public static void main(String[] args)
{
int l = 4, w = 6;
System.out.println(countRectangles(l, w));
}
}
// This code is contributed by mits
# Python3 code to find minimum number of
# squares to make a given rectangle.
import math
def countRectangles(l, w):
# if we take gcd(l, w), this
# will be largest possible
# side for square, hence minimum
# number of square.
squareSide = math.gcd(l,w)
# Number of squares.
return (l*w)/(squareSide*squareSide)
# Driver Code
if __name__ == '__main__':
l = 4
w = 6
ans = countRectangles(l, w)
print (int(ans))
# this code is contributed by
# SURENDRA_GANGWAR
// C# program to find minimum number of
// squares to make a given rectangle.
class GFG{
static int __gcd(int a, int b) {
if (b==0) return a;
return __gcd(b,a%b);
}
static int countRectangles(int l, int w)
{
// if we take gcd(l, w), this
// will be largest possible
// side for square, hence minimum
// number of square.
int squareSide = __gcd(l, w);
// Number of squares.
return (l * w) / (squareSide * squareSide);
}
// Driver code
public static void Main()
{
int l = 4, w = 6;
System.Console.WriteLine(countRectangles(l, w));
}
}
// This code is contributed by mits
<?php
// PHP program to find minimum number
// of squares to make a given rectangle.
function gcd($a, $b)
{
return $b ? gcd($b, $a % $b) : $a;
}
function countRectangles($l, $w)
{
// if we take gcd(l, w), this
// will be largest possible
// side for square, hence minimum
// number of square.
$squareSide = gcd($l, $w);
// Number of squares.
return ($l * $w) / ($squareSide *
$squareSide);
}
// Driver code
$l = 4;
$w = 6;
echo countRectangles($l, $w) . "\n";
// This code is contributed
// by ChitraNayal
?>
<script>
// Javascript program to find minimum number of
// squares to make a given rectangle.
function __gcd(a, b) {
if (b==0) return a;
return __gcd(b,a%b);
}
function countRectangles(l, w)
{
// if we take gcd(l, w), this
// will be largest possible
// side for square, hence minimum
// number of square.
let squareSide = __gcd(l, w);
// Number of squares.
return parseInt((l * w) / (squareSide * squareSide));
}
// Driver code
let l = 4, w = 6;
document.write(countRectangles(l, w));
</script>
Output:
6
Time Complexity: O(log(min(a, b))), where a and b are two parameters of gcd.
Auxiliary Space: O(log(min(a, b)))
