Número de rectángulos únicos formados usando N cuadrados unitarios

Te dan N cuadrados unitarios (cuadrados con una longitud de lado de 1 unidad) y te piden que hagas rectángulos usando estos cuadrados. Tienes que contar el número de rectángulos rotacionalmente únicos que puedes hacer. ¿Qué significa rotacionalmente único? Bueno, dos rectángulos son rotacionalmente únicos si uno no se puede rotar para volverse equivalente al otro. 

Ejemplo: el rectángulo de 4 × 2 se puede girar 90 grados en el sentido de las agujas del reloj para que sea exactamente igual que el rectángulo de 2 × 4 y, por lo tanto, estos no son rotativamente únicos. 
 

Number of unique rectangles formed using N unit squares

Ejemplos: 

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

Entonces, ¿cómo resolvemos este problema? 
Cada rectángulo está determinado únicamente por su longitud y su altura. 
Un rectángulo de longitud = l y altura = h entonces l * h <= n se considera equivalente a un rectángulo de longitud = h y altura = l siempre que l no sea igual a h. Si podemos tener algún tipo de «ordenamiento» en estos pares, podemos evitar contar (l, h) y (h, l) como rectángulos diferentes. Una forma de definir tal orden es: 

Suponga que longitud <= altura y cuente para todos los pares tales que longitud*altura <= n. 
Tenemos, longitud <= altura 
o, longitud*longitud <= longitud*altura 
o, longitud*longitud <= n 
o, longitud <= sqrt(n) 

C++

// C++ program to count rotationally equivalent
// rectangles with n unit squares
#include<bits/stdc++.h>
using namespace std;
 
int countRect(int n)
{
    int ans = 0;
    for (int length = 1; length <= sqrt(n); ++length)
    for (int height = length; height*length <= n; ++height)
            // height >= length is maintained
        ans++;
    return ans;
}
 
// Driver code
int main() {
    int n = 5;
    printf("%d", countRect(n));
    return 0;
}

Java

// Java program to count rotationally equivalent
// rectangles with n unit squares
class GFG {
     
    static int countRect(int n)
    {
        int ans = 0;
         
        for (int length = 1; length <= Math.sqrt(n);
                                           ++length)
            for (int height = length; height*length <= n;
                                                ++height)
                // height >= length is maintained
                ans++;
             
        return ans;
    }
     
    //driver code
    public static void main (String[] args)
    {
        int n = 5;
         
        System.out.print(countRect(n));
    }
}
 
// This code is contributed by Anant Agarwal.

Python3

# Python3 program to count rotationally
# equivalent rectangles with n unit squares
import math
 
def countRect(n):
 
    ans = 0
    for length in range(1, int(math.sqrt(n)) + 1):
        height = length
        while(height * length <= n):
             
            # height >= length is maintained
            ans += 1
            height += 1
    return ans
 
# Driver code
n = 5
print(countRect(n))
 
# This code is contributed by Anant Agarwal.

C#

// C# program to count rotationally
// equivalent rectangles with n unit
// squares
using System;
 
class GFG {
     
    static int countRect(int n)
    {
        int ans = 0;
        for (int length = 1;
            length <= Math.Sqrt(n); ++length)
             
            for (int height = length;
                     height*length <= n; ++height)
                ans++;
                 
        return ans;
    }
     
    //driver code
    public static void Main()
    {
         
        int n = 5;
         
        Console.Write(countRect(n));
    }
}
 
//This code is contributed by Anant Agarwal.

PHP

<?php
// PHP program to count
// rotationally equivalent
// rectangles with n unit squares
function countRect($n)
{
    $ans = 0;
    for ($length = 1;
         $length <= sqrt($n); $length++)
    for ($height = $length;
         $height * $length <= $n; $height++)
            // height >= length is maintained
        $ans++;
    return $ans;
}
 
// Driver code
$n = 5;
echo countRect($n);
 
// This code is contributed by @ajit
?>

Javascript

<script>
 
// Javascript program to count rotationally
// equivalent rectangles with n unit
// squares
function countRect(n)
{
    let ans = 0;
    for(let length = 1;
            length <= parseInt(Math.sqrt(n), 10);
          ++length)
           
        for(let height = length;
                height * length <= n;
              ++height)
            ans++;
               
    return ans;
}
 
// Driver code
let n = 5;
       
document.write(countRect(n));
 
// This code is contributed by divyesh072019
 
</script>

Producción : 

6 

Complejidad temporal: O(n√n) 
Espacio auxiliar: O(1)

Este artículo es una contribución de Aarti_Rathi y Hemang Sarkar . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *