Comprueba el cuadrado perfecto usando sumas y restas

Dado un entero positivo n, comprobar si es un cuadrado perfecto o no utilizando únicamente operaciones de suma/resta y en la mínima complejidad de tiempo.
Le recomendamos encarecidamente que minimice su navegador y que pruebe esto usted mismo primero.
Podemos usar la propiedad del número impar para este propósito: 

Addition of first n odd numbers is always perfect square 
1 + 3 = 4,      
1 + 3 + 5 = 9,     
1 + 3 + 5 + 7 + 9 + 11 = 36 ...

A continuación se muestra la implementación de la idea anterior: 

C++

// C++ program to check if n is perfect square
// or not
#include <bits/stdc++.h>
 
using namespace std;
 
// This function returns true if n is
// perfect square, else false
bool isPerfectSquare(int n)
{
    // sum is sum of all odd numbers. i is
    // used one by one hold odd numbers
    for (int sum = 0, i = 1; sum < n; i += 2) {
        sum += i;
        if (sum == n)
            return true;
    }
    return false;
}
 
// Driver code
int main()
{
    isPerfectSquare(35) ? cout << "Yes\n" : cout << "No\n";
    isPerfectSquare(49) ? cout << "Yes\n" : cout << "No\n";
    return 0;
}

Java

// Java program to check if n
// is perfect square or not
 
public class GFG {
 
    // This function returns true if n
    // is perfect square, else false
    static boolean isPerfectSquare(int n)
    {
        // sum is sum of all odd numbers. i is
        // used one by one hold odd numbers
        for (int sum = 0, i = 1; sum < n; i += 2) {
            sum += i;
            if (sum == n)
                return true;
        }
        return false;
    }
 
    // Driver Code
    public static void main(String args[])
    {
 
        if (isPerfectSquare(35))
            System.out.println("Yes");
        else
            System.out.println("NO");
 
        if (isPerfectSquare(49))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
 
// This code is contributed by Sam007

Python3

# This function returns true if n is
# perfect square, else false
def isPerfectSquare(n):
 
    # the_sum is sum of all odd numbers. i is
    # used one by one hold odd numbers
    i = 1
    the_sum = 0
    while the_sum < n:
        the_sum += i
        if the_sum == n:
            return True
        i += 2
    return False
 
# Driver code
if __name__ == "__main__":
    print('Yes') if isPerfectSquare(35) else print('NO')
    print('Yes') if isPerfectSquare(49) else print('NO')
 
# This code works only in Python 3

C#

// C# program to check if n
// is perfect square or not
using System;
 
public class GFG {
 
    // This function returns true if n
    // is perfect square, else false
    static bool isPerfectSquare(int n)
    {
        // sum is sum of all odd numbers. i is
        // used one by one hold odd numbers
        for (int sum = 0, i = 1; sum < n; i += 2) {
            sum += i;
            if (sum == n)
                return true;
        }
        return false;
    }
 
    // Driver Code
    public static void Main(String[] args)
    {
 
        if (isPerfectSquare(35))
            Console.WriteLine("Yes");
        else
            Console.WriteLine("No");
 
        if (isPerfectSquare(49))
            Console.WriteLine("Yes");
        else
            Console.WriteLine("No");
    }
}
 
// This code is contributed by Sam007.

PHP

<?php
// PHP program to check if n is
// perfect square or not
 
// This function returns true if n is
// perfect square, else false
function isPerfectSquare($n)
{
    // sum is sum of all odd numbers.
    // i is used one by one hold odd
    // numbers
    for ( $sum = 0, $i = 1; $sum < $n;
                              $i += 2)
    {
        $sum += $i;
        if ($sum == $n)
            return true;
    }
     
    return false;
}
 
// Driver code
if(isPerfectSquare(35))
    echo "Yes\n";
else
    echo "No\n";
     
if(isPerfectSquare(49))
    echo "Yes\n";
else
    echo "No\n";
 
// This code is contributed by ajit.
?>

Javascript

<script>
 
// JavaScript program to check if n
// is perfect square or not
 
    // This function returns true if n
    // is perfect square, else false
    function isPerfectSquare(n)
    {
        // sum is sum of all odd numbers. i is
        // used one by one hold odd numbers
        for (let sum = 0, i = 1; sum < n; i += 2) {
            sum += i;
            if (sum == n)
                return true;
        }
        return false;
    }
 
// Driver Code
 
        if (isPerfectSquare(35))
           document.write("Yes" + "<br/>");
        else
            document.write("NO" + "<br/>");
  
        if (isPerfectSquare(49))
            document.write("Yes" + "<br/>");
        else
            document.write("No" + "<br/>");
     
    // This code is contributed by target_2.
</script>

Producción : 

No
Yes

Complejidad de tiempo: O(n)

Espacio auxiliar: O(1)
¿Cómo funciona esto?  
A continuación se muestra la explicación del enfoque anterior. 

1 + 3 + 5 + ...  (2n-1) = (2*i - 1) where 1<=i<=n
                        = 2*i - 1  where 1<=i<=n
                        = 2n(n+1)/2 - n
                        = n(n+1) - n
                        = n2

Referencia:  
https://www.geeksforgeeks.org/sum-first-n-odd-numbers-o1-complexity/  
http://blog.jgc.org/2008/02/sum-of-first-n-odd- number-is-always.html
Este artículo es una contribución de Utkarsh Trivedi. 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 *