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